// export Neutral ; export def_base_level , def_amount_of_people , def_initial_level , def_starting_resources , def_shipments_density , def_shared_vision , def_morale_flags , def_siberite_detection , def_amount_of_apemen , def_new_people ; export is_depot , number_of_people , initial_level , starting_crates , starting_resources , shipments_density , number_of_apemen , time_new_people ; export Side_Count , Team_Count , Player_Side , Player_Team , Side_Teams , Teams ; export Side_Positions , Side_Nations , Side_Names , Team_Names ; export buildings_def , start_def ; function read_multiplayer_and_game_parameters ; var side , dep , br1 , br2 , br3 , un , i ; begin
   0: LD_INT 0
   2: PPUSH
   3: PPUSH
   4: PPUSH
   5: PPUSH
   6: PPUSH
   7: PPUSH
   8: PPUSH
   9: PPUSH
// if MultiPlayer then
  10: LD_OWVAR 4
  14: IFFALSE 78
// begin Player_Side = mp_player_side ;
  16: LD_ADDR_EXP 22
  20: PUSH
  21: LD_OWVAR 7
  25: ST_TO_ADDR
// Player_Team = mp_player_team ;
  26: LD_ADDR_EXP 23
  30: PUSH
  31: LD_OWVAR 8
  35: ST_TO_ADDR
// Side_Positions = mp_sides_positions ;
  36: LD_ADDR_EXP 26
  40: PUSH
  41: LD_OWVAR 17
  45: ST_TO_ADDR
// Side_Teams = mp_sides_teams ;
  46: LD_ADDR_EXP 24
  50: PUSH
  51: LD_OWVAR 15
  55: ST_TO_ADDR
// Side_Nations = mp_sides_nations ;
  56: LD_ADDR_EXP 27
  60: PUSH
  61: LD_OWVAR 16
  65: ST_TO_ADDR
// Teams = mp_teams ;
  66: LD_ADDR_EXP 25
  70: PUSH
  71: LD_OWVAR 12
  75: ST_TO_ADDR
// end else
  76: GO 240
// begin Player_Side = 4 ;
  78: LD_ADDR_EXP 22
  82: PUSH
  83: LD_INT 4
  85: ST_TO_ADDR
// Player_Team = 2 ;
  86: LD_ADDR_EXP 23
  90: PUSH
  91: LD_INT 2
  93: ST_TO_ADDR
// Side_Positions = [ 0 , 3 , 0 , 1 , 0 , 2 , 4 , 0 ] ;
  94: LD_ADDR_EXP 26
  98: PUSH
  99: LD_INT 0
 101: PUSH
 102: LD_INT 3
 104: PUSH
 105: LD_INT 0
 107: PUSH
 108: LD_INT 1
 110: PUSH
 111: LD_INT 0
 113: PUSH
 114: LD_INT 2
 116: PUSH
 117: LD_INT 4
 119: PUSH
 120: LD_INT 0
 122: PUSH
 123: EMPTY
 124: LIST
 125: LIST
 126: LIST
 127: LIST
 128: LIST
 129: LIST
 130: LIST
 131: LIST
 132: ST_TO_ADDR
// Side_Teams = [ 0 , 1 , 0 , 2 , 0 , 1 , 2 , 0 ] ;
 133: LD_ADDR_EXP 24
 137: PUSH
 138: LD_INT 0
 140: PUSH
 141: LD_INT 1
 143: PUSH
 144: LD_INT 0
 146: PUSH
 147: LD_INT 2
 149: PUSH
 150: LD_INT 0
 152: PUSH
 153: LD_INT 1
 155: PUSH
 156: LD_INT 2
 158: PUSH
 159: LD_INT 0
 161: PUSH
 162: EMPTY
 163: LIST
 164: LIST
 165: LIST
 166: LIST
 167: LIST
 168: LIST
 169: LIST
 170: LIST
 171: ST_TO_ADDR
// Side_Nations = [ 0 , 3 , 0 , 1 , 0 , 1 , 3 , 0 ] ;
 172: LD_ADDR_EXP 27
 176: PUSH
 177: LD_INT 0
 179: PUSH
 180: LD_INT 3
 182: PUSH
 183: LD_INT 0
 185: PUSH
 186: LD_INT 1
 188: PUSH
 189: LD_INT 0
 191: PUSH
 192: LD_INT 1
 194: PUSH
 195: LD_INT 3
 197: PUSH
 198: LD_INT 0
 200: PUSH
 201: EMPTY
 202: LIST
 203: LIST
 204: LIST
 205: LIST
 206: LIST
 207: LIST
 208: LIST
 209: LIST
 210: ST_TO_ADDR
// Teams = [ [ 2 , 6 ] , [ 7 , 4 ] ] ;
 211: LD_ADDR_EXP 25
 215: PUSH
 216: LD_INT 2
 218: PUSH
 219: LD_INT 6
 221: PUSH
 222: EMPTY
 223: LIST
 224: LIST
 225: PUSH
 226: LD_INT 7
 228: PUSH
 229: LD_INT 4
 231: PUSH
 232: EMPTY
 233: LIST
 234: LIST
 235: PUSH
 236: EMPTY
 237: LIST
 238: LIST
 239: ST_TO_ADDR
// end ; Side_Count = ( Side_Positions diff [ 0 ] ) + 0 ;
 240: LD_ADDR_EXP 20
 244: PUSH
 245: LD_EXP 26
 249: PUSH
 250: LD_INT 0
 252: PUSH
 253: EMPTY
 254: LIST
 255: DIFF
 256: PUSH
 257: LD_INT 0
 259: PLUS
 260: ST_TO_ADDR
// Team_Count = ( Side_Teams diff [ 0 ] ) + 0 ;
 261: LD_ADDR_EXP 21
 265: PUSH
 266: LD_EXP 24
 270: PUSH
 271: LD_INT 0
 273: PUSH
 274: EMPTY
 275: LIST
 276: DIFF
 277: PUSH
 278: LD_INT 0
 280: PLUS
 281: ST_TO_ADDR
// if MultiPlayer then
 282: LD_OWVAR 4
 286: IFFALSE 420
// begin def_base_level = GetMultiplayerSetting ( 0 ) ;
 288: LD_ADDR_EXP 2
 292: PUSH
 293: LD_INT 0
 295: PPUSH
 296: CALL_OW 426
 300: ST_TO_ADDR
// def_amount_of_people = GetMultiplayerSetting ( 1 ) ;
 301: LD_ADDR_EXP 3
 305: PUSH
 306: LD_INT 1
 308: PPUSH
 309: CALL_OW 426
 313: ST_TO_ADDR
// def_initial_level = GetMultiplayerSetting ( 2 ) ;
 314: LD_ADDR_EXP 4
 318: PUSH
 319: LD_INT 2
 321: PPUSH
 322: CALL_OW 426
 326: ST_TO_ADDR
// def_starting_resources = GetMultiplayerSetting ( 3 ) ;
 327: LD_ADDR_EXP 5
 331: PUSH
 332: LD_INT 3
 334: PPUSH
 335: CALL_OW 426
 339: ST_TO_ADDR
// def_shipments_density = GetMultiplayerSetting ( 4 ) ;
 340: LD_ADDR_EXP 6
 344: PUSH
 345: LD_INT 4
 347: PPUSH
 348: CALL_OW 426
 352: ST_TO_ADDR
// def_shared_vision = GetMultiplayerSetting ( 10 ) ;
 353: LD_ADDR_EXP 7
 357: PUSH
 358: LD_INT 10
 360: PPUSH
 361: CALL_OW 426
 365: ST_TO_ADDR
// def_morale_flags = GetMultiplayerSetting ( 11 ) ;
 366: LD_ADDR_EXP 8
 370: PUSH
 371: LD_INT 11
 373: PPUSH
 374: CALL_OW 426
 378: ST_TO_ADDR
// def_siberite_detection = GetMultiplayerSetting ( 12 ) ;
 379: LD_ADDR_EXP 9
 383: PUSH
 384: LD_INT 12
 386: PPUSH
 387: CALL_OW 426
 391: ST_TO_ADDR
// def_amount_of_apemen = GetMultiplayerSetting ( 13 ) ;
 392: LD_ADDR_EXP 10
 396: PUSH
 397: LD_INT 13
 399: PPUSH
 400: CALL_OW 426
 404: ST_TO_ADDR
// def_new_people = GetMultiplayerSetting ( 14 ) ;
 405: LD_ADDR_EXP 11
 409: PUSH
 410: LD_INT 14
 412: PPUSH
 413: CALL_OW 426
 417: ST_TO_ADDR
// end else
 418: GO 504
// begin randomize ;
 420: CALL_OW 10
// def_base_level = 2 ;
 424: LD_ADDR_EXP 2
 428: PUSH
 429: LD_INT 2
 431: ST_TO_ADDR
// def_amount_of_people = 1 ;
 432: LD_ADDR_EXP 3
 436: PUSH
 437: LD_INT 1
 439: ST_TO_ADDR
// def_initial_level = 1 ;
 440: LD_ADDR_EXP 4
 444: PUSH
 445: LD_INT 1
 447: ST_TO_ADDR
// def_starting_resources = 2 ;
 448: LD_ADDR_EXP 5
 452: PUSH
 453: LD_INT 2
 455: ST_TO_ADDR
// def_shipments_density = 1 ;
 456: LD_ADDR_EXP 6
 460: PUSH
 461: LD_INT 1
 463: ST_TO_ADDR
// def_shared_vision = 1 ;
 464: LD_ADDR_EXP 7
 468: PUSH
 469: LD_INT 1
 471: ST_TO_ADDR
// def_morale_flags = 1 ;
 472: LD_ADDR_EXP 8
 476: PUSH
 477: LD_INT 1
 479: ST_TO_ADDR
// def_siberite_detection = 1 ;
 480: LD_ADDR_EXP 9
 484: PUSH
 485: LD_INT 1
 487: ST_TO_ADDR
// def_amount_of_apemen = 1 ;
 488: LD_ADDR_EXP 10
 492: PUSH
 493: LD_INT 1
 495: ST_TO_ADDR
// def_new_people = 1 ;
 496: LD_ADDR_EXP 11
 500: PUSH
 501: LD_INT 1
 503: ST_TO_ADDR
// end ; is_depot = [ 0 , 1 , 1 , 1 ] [ def_base_level + 1 ] ;
 504: LD_ADDR_EXP 12
 508: PUSH
 509: LD_INT 0
 511: PUSH
 512: LD_INT 1
 514: PUSH
 515: LD_INT 1
 517: PUSH
 518: LD_INT 1
 520: PUSH
 521: EMPTY
 522: LIST
 523: LIST
 524: LIST
 525: LIST
 526: PUSH
 527: LD_EXP 2
 531: PUSH
 532: LD_INT 1
 534: PLUS
 535: ARRAY
 536: ST_TO_ADDR
// number_of_people = [ 6 , 8 , 10 , 12 , 15 ] [ def_amount_of_people + 1 ] ;
 537: LD_ADDR_EXP 13
 541: PUSH
 542: LD_INT 6
 544: PUSH
 545: LD_INT 8
 547: PUSH
 548: LD_INT 10
 550: PUSH
 551: LD_INT 12
 553: PUSH
 554: LD_INT 15
 556: PUSH
 557: EMPTY
 558: LIST
 559: LIST
 560: LIST
 561: LIST
 562: LIST
 563: PUSH
 564: LD_EXP 3
 568: PUSH
 569: LD_INT 1
 571: PLUS
 572: ARRAY
 573: ST_TO_ADDR
// initial_level = [ 1 , 2 , 3 , 5 , 7 ] [ def_initial_level + 1 ] ;
 574: LD_ADDR_EXP 14
 578: PUSH
 579: LD_INT 1
 581: PUSH
 582: LD_INT 2
 584: PUSH
 585: LD_INT 3
 587: PUSH
 588: LD_INT 5
 590: PUSH
 591: LD_INT 7
 593: PUSH
 594: EMPTY
 595: LIST
 596: LIST
 597: LIST
 598: LIST
 599: LIST
 600: PUSH
 601: LD_EXP 4
 605: PUSH
 606: LD_INT 1
 608: PLUS
 609: ARRAY
 610: ST_TO_ADDR
// starting_resources = [ [ 0 , 0 , 0 ] , [ 30 , 0 , 0 ] , [ 50 , 20 , 0 ] , [ 80 , 40 , 20 ] ] [ def_starting_resources + 1 ] ;
 611: LD_ADDR_EXP 16
 615: PUSH
 616: LD_INT 0
 618: PUSH
 619: LD_INT 0
 621: PUSH
 622: LD_INT 0
 624: PUSH
 625: EMPTY
 626: LIST
 627: LIST
 628: LIST
 629: PUSH
 630: LD_INT 30
 632: PUSH
 633: LD_INT 0
 635: PUSH
 636: LD_INT 0
 638: PUSH
 639: EMPTY
 640: LIST
 641: LIST
 642: LIST
 643: PUSH
 644: LD_INT 50
 646: PUSH
 647: LD_INT 20
 649: PUSH
 650: LD_INT 0
 652: PUSH
 653: EMPTY
 654: LIST
 655: LIST
 656: LIST
 657: PUSH
 658: LD_INT 80
 660: PUSH
 661: LD_INT 40
 663: PUSH
 664: LD_INT 20
 666: PUSH
 667: EMPTY
 668: LIST
 669: LIST
 670: LIST
 671: PUSH
 672: EMPTY
 673: LIST
 674: LIST
 675: LIST
 676: LIST
 677: PUSH
 678: LD_EXP 5
 682: PUSH
 683: LD_INT 1
 685: PLUS
 686: ARRAY
 687: ST_TO_ADDR
// shipments_density = [ 20 , 30 , 40 ] [ def_shipments_density + 1 ] ;
 688: LD_ADDR_EXP 17
 692: PUSH
 693: LD_INT 20
 695: PUSH
 696: LD_INT 30
 698: PUSH
 699: LD_INT 40
 701: PUSH
 702: EMPTY
 703: LIST
 704: LIST
 705: LIST
 706: PUSH
 707: LD_EXP 6
 711: PUSH
 712: LD_INT 1
 714: PLUS
 715: ARRAY
 716: ST_TO_ADDR
// number_of_apemen = [ 0 , 8 , 13 , 20 , 35 ] [ def_amount_of_apemen + 1 ] ;
 717: LD_ADDR_EXP 18
 721: PUSH
 722: LD_INT 0
 724: PUSH
 725: LD_INT 8
 727: PUSH
 728: LD_INT 13
 730: PUSH
 731: LD_INT 20
 733: PUSH
 734: LD_INT 35
 736: PUSH
 737: EMPTY
 738: LIST
 739: LIST
 740: LIST
 741: LIST
 742: LIST
 743: PUSH
 744: LD_EXP 10
 748: PUSH
 749: LD_INT 1
 751: PLUS
 752: ARRAY
 753: ST_TO_ADDR
// time_new_people = [ 0 , 25 , 45 , 65 ] [ def_new_people ] ;
 754: LD_ADDR_EXP 19
 758: PUSH
 759: LD_INT 0
 761: PUSH
 762: LD_INT 25
 764: PUSH
 765: LD_INT 45
 767: PUSH
 768: LD_INT 65
 770: PUSH
 771: EMPTY
 772: LIST
 773: LIST
 774: LIST
 775: LIST
 776: PUSH
 777: LD_EXP 11
 781: ARRAY
 782: ST_TO_ADDR
// end ;
 783: LD_VAR 0 1
 787: RET
// function prepare_map_coordinates ; begin
 788: LD_INT 0
 790: PPUSH
// start_def = [ [ 14 , 11 ] , [ 116 , 15 ] , [ 70 , 123 ] , [ 161 , 100 ] ] ;
 791: LD_ADDR_EXP 31
 795: PUSH
 796: LD_INT 14
 798: PUSH
 799: LD_INT 11
 801: PUSH
 802: EMPTY
 803: LIST
 804: LIST
 805: PUSH
 806: LD_INT 116
 808: PUSH
 809: LD_INT 15
 811: PUSH
 812: EMPTY
 813: LIST
 814: LIST
 815: PUSH
 816: LD_INT 70
 818: PUSH
 819: LD_INT 123
 821: PUSH
 822: EMPTY
 823: LIST
 824: LIST
 825: PUSH
 826: LD_INT 161
 828: PUSH
 829: LD_INT 100
 831: PUSH
 832: EMPTY
 833: LIST
 834: LIST
 835: PUSH
 836: EMPTY
 837: LIST
 838: LIST
 839: LIST
 840: LIST
 841: ST_TO_ADDR
// case def_base_level of 0 :
 842: LD_EXP 2
 846: PUSH
 847: LD_INT 0
 849: DOUBLE
 850: EQUAL
 851: IFTRUE 855
 853: GO 877
 855: POP
// begin buildings_def = [ [ ] , [ ] , [ ] , [ ] ] ;
 856: LD_ADDR_EXP 30
 860: PUSH
 861: EMPTY
 862: PUSH
 863: EMPTY
 864: PUSH
 865: EMPTY
 866: PUSH
 867: EMPTY
 868: PUSH
 869: EMPTY
 870: LIST
 871: LIST
 872: LIST
 873: LIST
 874: ST_TO_ADDR
// end ; 1 :
 875: GO 2260
 877: LD_INT 1
 879: DOUBLE
 880: EQUAL
 881: IFTRUE 885
 883: GO 983
 885: POP
// begin buildings_def = [ [ [ b_depot , 18 , 5 , 3 ] ] , [ [ b_depot , 110 , 4 , 2 ] ] , [ [ b_depot , 77 , 134 , 0 ] ] , [ [ b_depot , 164 , 98 , 4 ] ] ] ;
 886: LD_ADDR_EXP 30
 890: PUSH
 891: LD_INT 0
 893: PUSH
 894: LD_INT 18
 896: PUSH
 897: LD_INT 5
 899: PUSH
 900: LD_INT 3
 902: PUSH
 903: EMPTY
 904: LIST
 905: LIST
 906: LIST
 907: LIST
 908: PUSH
 909: EMPTY
 910: LIST
 911: PUSH
 912: LD_INT 0
 914: PUSH
 915: LD_INT 110
 917: PUSH
 918: LD_INT 4
 920: PUSH
 921: LD_INT 2
 923: PUSH
 924: EMPTY
 925: LIST
 926: LIST
 927: LIST
 928: LIST
 929: PUSH
 930: EMPTY
 931: LIST
 932: PUSH
 933: LD_INT 0
 935: PUSH
 936: LD_INT 77
 938: PUSH
 939: LD_INT 134
 941: PUSH
 942: LD_INT 0
 944: PUSH
 945: EMPTY
 946: LIST
 947: LIST
 948: LIST
 949: LIST
 950: PUSH
 951: EMPTY
 952: LIST
 953: PUSH
 954: LD_INT 0
 956: PUSH
 957: LD_INT 164
 959: PUSH
 960: LD_INT 98
 962: PUSH
 963: LD_INT 4
 965: PUSH
 966: EMPTY
 967: LIST
 968: LIST
 969: LIST
 970: LIST
 971: PUSH
 972: EMPTY
 973: LIST
 974: PUSH
 975: EMPTY
 976: LIST
 977: LIST
 978: LIST
 979: LIST
 980: ST_TO_ADDR
// end ; 2 :
 981: GO 2260
 983: LD_INT 2
 985: DOUBLE
 986: EQUAL
 987: IFTRUE 991
 989: GO 1545
 991: POP
// begin buildings_def = [ [ [ b_depot , 18 , 5 , 3 ] , [ b_oil_mine , 5 , 4 , 4 ] , [ b_lab , 13 , 19 , 1 ] , [ b_workshop , 12 , 7 , 3 ] , [ b_armoury , 23 , 3 , 3 ] , [ b_breastwork , 23 , 18 , 5 ] , [ b_breastwork , 24 , 11 , 5 ] ] , [ [ b_depot , 110 , 4 , 2 ] , [ b_oil_mine , 118 , 3 , 4 ] , [ b_lab , 122 , 12 , 4 ] , [ b_workshop , 118 , 18 , 3 ] , [ b_armoury , 108 , 13 , 1 ] , [ b_breastwork , 117 , 27 , 0 ] , [ b_breastwork , 126 , 30 , 0 ] ] , [ [ b_depot , 77 , 134 , 0 ] , [ b_oil_mine , 72 , 134 , 0 ] , [ b_lab , 68 , 127 , 0 ] , [ b_workshop , 64 , 116 , 2 ] , [ b_armoury , 85 , 136 , 0 ] , [ b_breastwork , 91 , 132 , 3 ] , [ b_breastwork , 80 , 124 , 3 ] ] , [ [ b_depot , 164 , 98 , 4 ] , [ b_oil_mine , 161 , 89 , 3 ] , [ b_lab , 177 , 124 , 3 ] , [ b_workshop , 167 , 107 , 3 ] , [ b_armoury , 159 , 105 , 0 ] , [ b_breastwork , 152 , 94 , 2 ] , [ b_breastwork , 158 , 86 , 3 ] ] ] ;
 992: LD_ADDR_EXP 30
 996: PUSH
 997: LD_INT 0
 999: PUSH
1000: LD_INT 18
1002: PUSH
1003: LD_INT 5
1005: PUSH
1006: LD_INT 3
1008: PUSH
1009: EMPTY
1010: LIST
1011: LIST
1012: LIST
1013: LIST
1014: PUSH
1015: LD_INT 29
1017: PUSH
1018: LD_INT 5
1020: PUSH
1021: LD_INT 4
1023: PUSH
1024: LD_INT 4
1026: PUSH
1027: EMPTY
1028: LIST
1029: LIST
1030: LIST
1031: LIST
1032: PUSH
1033: LD_INT 6
1035: PUSH
1036: LD_INT 13
1038: PUSH
1039: LD_INT 19
1041: PUSH
1042: LD_INT 1
1044: PUSH
1045: EMPTY
1046: LIST
1047: LIST
1048: LIST
1049: LIST
1050: PUSH
1051: LD_INT 2
1053: PUSH
1054: LD_INT 12
1056: PUSH
1057: LD_INT 7
1059: PUSH
1060: LD_INT 3
1062: PUSH
1063: EMPTY
1064: LIST
1065: LIST
1066: LIST
1067: LIST
1068: PUSH
1069: LD_INT 4
1071: PUSH
1072: LD_INT 23
1074: PUSH
1075: LD_INT 3
1077: PUSH
1078: LD_INT 3
1080: PUSH
1081: EMPTY
1082: LIST
1083: LIST
1084: LIST
1085: LIST
1086: PUSH
1087: LD_INT 31
1089: PUSH
1090: LD_INT 23
1092: PUSH
1093: LD_INT 18
1095: PUSH
1096: LD_INT 5
1098: PUSH
1099: EMPTY
1100: LIST
1101: LIST
1102: LIST
1103: LIST
1104: PUSH
1105: LD_INT 31
1107: PUSH
1108: LD_INT 24
1110: PUSH
1111: LD_INT 11
1113: PUSH
1114: LD_INT 5
1116: PUSH
1117: EMPTY
1118: LIST
1119: LIST
1120: LIST
1121: LIST
1122: PUSH
1123: EMPTY
1124: LIST
1125: LIST
1126: LIST
1127: LIST
1128: LIST
1129: LIST
1130: LIST
1131: PUSH
1132: LD_INT 0
1134: PUSH
1135: LD_INT 110
1137: PUSH
1138: LD_INT 4
1140: PUSH
1141: LD_INT 2
1143: PUSH
1144: EMPTY
1145: LIST
1146: LIST
1147: LIST
1148: LIST
1149: PUSH
1150: LD_INT 29
1152: PUSH
1153: LD_INT 118
1155: PUSH
1156: LD_INT 3
1158: PUSH
1159: LD_INT 4
1161: PUSH
1162: EMPTY
1163: LIST
1164: LIST
1165: LIST
1166: LIST
1167: PUSH
1168: LD_INT 6
1170: PUSH
1171: LD_INT 122
1173: PUSH
1174: LD_INT 12
1176: PUSH
1177: LD_INT 4
1179: PUSH
1180: EMPTY
1181: LIST
1182: LIST
1183: LIST
1184: LIST
1185: PUSH
1186: LD_INT 2
1188: PUSH
1189: LD_INT 118
1191: PUSH
1192: LD_INT 18
1194: PUSH
1195: LD_INT 3
1197: PUSH
1198: EMPTY
1199: LIST
1200: LIST
1201: LIST
1202: LIST
1203: PUSH
1204: LD_INT 4
1206: PUSH
1207: LD_INT 108
1209: PUSH
1210: LD_INT 13
1212: PUSH
1213: LD_INT 1
1215: PUSH
1216: EMPTY
1217: LIST
1218: LIST
1219: LIST
1220: LIST
1221: PUSH
1222: LD_INT 31
1224: PUSH
1225: LD_INT 117
1227: PUSH
1228: LD_INT 27
1230: PUSH
1231: LD_INT 0
1233: PUSH
1234: EMPTY
1235: LIST
1236: LIST
1237: LIST
1238: LIST
1239: PUSH
1240: LD_INT 31
1242: PUSH
1243: LD_INT 126
1245: PUSH
1246: LD_INT 30
1248: PUSH
1249: LD_INT 0
1251: PUSH
1252: EMPTY
1253: LIST
1254: LIST
1255: LIST
1256: LIST
1257: PUSH
1258: EMPTY
1259: LIST
1260: LIST
1261: LIST
1262: LIST
1263: LIST
1264: LIST
1265: LIST
1266: PUSH
1267: LD_INT 0
1269: PUSH
1270: LD_INT 77
1272: PUSH
1273: LD_INT 134
1275: PUSH
1276: LD_INT 0
1278: PUSH
1279: EMPTY
1280: LIST
1281: LIST
1282: LIST
1283: LIST
1284: PUSH
1285: LD_INT 29
1287: PUSH
1288: LD_INT 72
1290: PUSH
1291: LD_INT 134
1293: PUSH
1294: LD_INT 0
1296: PUSH
1297: EMPTY
1298: LIST
1299: LIST
1300: LIST
1301: LIST
1302: PUSH
1303: LD_INT 6
1305: PUSH
1306: LD_INT 68
1308: PUSH
1309: LD_INT 127
1311: PUSH
1312: LD_INT 0
1314: PUSH
1315: EMPTY
1316: LIST
1317: LIST
1318: LIST
1319: LIST
1320: PUSH
1321: LD_INT 2
1323: PUSH
1324: LD_INT 64
1326: PUSH
1327: LD_INT 116
1329: PUSH
1330: LD_INT 2
1332: PUSH
1333: EMPTY
1334: LIST
1335: LIST
1336: LIST
1337: LIST
1338: PUSH
1339: LD_INT 4
1341: PUSH
1342: LD_INT 85
1344: PUSH
1345: LD_INT 136
1347: PUSH
1348: LD_INT 0
1350: PUSH
1351: EMPTY
1352: LIST
1353: LIST
1354: LIST
1355: LIST
1356: PUSH
1357: LD_INT 31
1359: PUSH
1360: LD_INT 91
1362: PUSH
1363: LD_INT 132
1365: PUSH
1366: LD_INT 3
1368: PUSH
1369: EMPTY
1370: LIST
1371: LIST
1372: LIST
1373: LIST
1374: PUSH
1375: LD_INT 31
1377: PUSH
1378: LD_INT 80
1380: PUSH
1381: LD_INT 124
1383: PUSH
1384: LD_INT 3
1386: PUSH
1387: EMPTY
1388: LIST
1389: LIST
1390: LIST
1391: LIST
1392: PUSH
1393: EMPTY
1394: LIST
1395: LIST
1396: LIST
1397: LIST
1398: LIST
1399: LIST
1400: LIST
1401: PUSH
1402: LD_INT 0
1404: PUSH
1405: LD_INT 164
1407: PUSH
1408: LD_INT 98
1410: PUSH
1411: LD_INT 4
1413: PUSH
1414: EMPTY
1415: LIST
1416: LIST
1417: LIST
1418: LIST
1419: PUSH
1420: LD_INT 29
1422: PUSH
1423: LD_INT 161
1425: PUSH
1426: LD_INT 89
1428: PUSH
1429: LD_INT 3
1431: PUSH
1432: EMPTY
1433: LIST
1434: LIST
1435: LIST
1436: LIST
1437: PUSH
1438: LD_INT 6
1440: PUSH
1441: LD_INT 177
1443: PUSH
1444: LD_INT 124
1446: PUSH
1447: LD_INT 3
1449: PUSH
1450: EMPTY
1451: LIST
1452: LIST
1453: LIST
1454: LIST
1455: PUSH
1456: LD_INT 2
1458: PUSH
1459: LD_INT 167
1461: PUSH
1462: LD_INT 107
1464: PUSH
1465: LD_INT 3
1467: PUSH
1468: EMPTY
1469: LIST
1470: LIST
1471: LIST
1472: LIST
1473: PUSH
1474: LD_INT 4
1476: PUSH
1477: LD_INT 159
1479: PUSH
1480: LD_INT 105
1482: PUSH
1483: LD_INT 0
1485: PUSH
1486: EMPTY
1487: LIST
1488: LIST
1489: LIST
1490: LIST
1491: PUSH
1492: LD_INT 31
1494: PUSH
1495: LD_INT 152
1497: PUSH
1498: LD_INT 94
1500: PUSH
1501: LD_INT 2
1503: PUSH
1504: EMPTY
1505: LIST
1506: LIST
1507: LIST
1508: LIST
1509: PUSH
1510: LD_INT 31
1512: PUSH
1513: LD_INT 158
1515: PUSH
1516: LD_INT 86
1518: PUSH
1519: LD_INT 3
1521: PUSH
1522: EMPTY
1523: LIST
1524: LIST
1525: LIST
1526: LIST
1527: PUSH
1528: EMPTY
1529: LIST
1530: LIST
1531: LIST
1532: LIST
1533: LIST
1534: LIST
1535: LIST
1536: PUSH
1537: EMPTY
1538: LIST
1539: LIST
1540: LIST
1541: LIST
1542: ST_TO_ADDR
// end ; 3 :
1543: GO 2260
1545: LD_INT 3
1547: DOUBLE
1548: EQUAL
1549: IFTRUE 1553
1551: GO 2259
1553: POP
// begin buildings_def = [ [ [ b_warehouse , 18 , 5 , 3 ] , [ b_oil_mine , 5 , 4 , 4 ] , [ b_lab , 13 , 19 , 1 ] , [ b_factory , 12 , 7 , 3 ] , [ b_barracks , 23 , 3 , 3 ] , [ b_bunker , 23 , 18 , 5 ] , [ b_bunker , 24 , 11 , 5 ] , [ b_ext_gun , 9 , 4 , 2 ] , [ b_ext_track , 12 , 3 , 3 ] ] , [ [ b_warehouse , 110 , 4 , 2 ] , [ b_oil_mine , 118 , 3 , 4 ] , [ b_lab , 122 , 12 , 4 ] , [ b_factory , 118 , 18 , 3 ] , [ b_barracks , 108 , 13 , 1 ] , [ b_bunker , 117 , 27 , 0 ] , [ b_bunker , 126 , 30 , 0 ] , [ b_ext_gun , 118 , 14 , 3 ] , [ b_ext_track , 121 , 18 , 4 ] ] , [ [ b_warehouse , 77 , 134 , 0 ] , [ b_oil_mine , 72 , 134 , 0 ] , [ b_lab , 68 , 127 , 0 ] , [ b_factory , 64 , 116 , 2 ] , [ b_barracks , 85 , 136 , 0 ] , [ b_bunker , 91 , 132 , 3 ] , [ b_bunker , 80 , 124 , 3 ] , [ b_ext_gun , 61 , 116 , 1 ] , [ b_ext_track , 64 , 120 , 0 ] ] , [ [ b_warehouse , 164 , 98 , 4 ] , [ b_oil_mine , 161 , 89 , 3 ] , [ b_lab , 177 , 124 , 3 ] , [ b_factory , 167 , 107 , 3 ] , [ b_barracks , 159 , 105 , 0 ] , [ b_bunker , 152 , 94 , 2 ] , [ b_bunker , 158 , 86 , 3 ] , [ b_ext_gun , 170 , 107 , 4 ] , [ b_ext_track , 167 , 103 , 3 ] ] ] ;
1554: LD_ADDR_EXP 30
1558: PUSH
1559: LD_INT 1
1561: PUSH
1562: LD_INT 18
1564: PUSH
1565: LD_INT 5
1567: PUSH
1568: LD_INT 3
1570: PUSH
1571: EMPTY
1572: LIST
1573: LIST
1574: LIST
1575: LIST
1576: PUSH
1577: LD_INT 29
1579: PUSH
1580: LD_INT 5
1582: PUSH
1583: LD_INT 4
1585: PUSH
1586: LD_INT 4
1588: PUSH
1589: EMPTY
1590: LIST
1591: LIST
1592: LIST
1593: LIST
1594: PUSH
1595: LD_INT 6
1597: PUSH
1598: LD_INT 13
1600: PUSH
1601: LD_INT 19
1603: PUSH
1604: LD_INT 1
1606: PUSH
1607: EMPTY
1608: LIST
1609: LIST
1610: LIST
1611: LIST
1612: PUSH
1613: LD_INT 3
1615: PUSH
1616: LD_INT 12
1618: PUSH
1619: LD_INT 7
1621: PUSH
1622: LD_INT 3
1624: PUSH
1625: EMPTY
1626: LIST
1627: LIST
1628: LIST
1629: LIST
1630: PUSH
1631: LD_INT 5
1633: PUSH
1634: LD_INT 23
1636: PUSH
1637: LD_INT 3
1639: PUSH
1640: LD_INT 3
1642: PUSH
1643: EMPTY
1644: LIST
1645: LIST
1646: LIST
1647: LIST
1648: PUSH
1649: LD_INT 32
1651: PUSH
1652: LD_INT 23
1654: PUSH
1655: LD_INT 18
1657: PUSH
1658: LD_INT 5
1660: PUSH
1661: EMPTY
1662: LIST
1663: LIST
1664: LIST
1665: LIST
1666: PUSH
1667: LD_INT 32
1669: PUSH
1670: LD_INT 24
1672: PUSH
1673: LD_INT 11
1675: PUSH
1676: LD_INT 5
1678: PUSH
1679: EMPTY
1680: LIST
1681: LIST
1682: LIST
1683: LIST
1684: PUSH
1685: LD_INT 17
1687: PUSH
1688: LD_INT 9
1690: PUSH
1691: LD_INT 4
1693: PUSH
1694: LD_INT 2
1696: PUSH
1697: EMPTY
1698: LIST
1699: LIST
1700: LIST
1701: LIST
1702: PUSH
1703: LD_INT 16
1705: PUSH
1706: LD_INT 12
1708: PUSH
1709: LD_INT 3
1711: PUSH
1712: LD_INT 3
1714: PUSH
1715: EMPTY
1716: LIST
1717: LIST
1718: LIST
1719: LIST
1720: PUSH
1721: EMPTY
1722: LIST
1723: LIST
1724: LIST
1725: LIST
1726: LIST
1727: LIST
1728: LIST
1729: LIST
1730: LIST
1731: PUSH
1732: LD_INT 1
1734: PUSH
1735: LD_INT 110
1737: PUSH
1738: LD_INT 4
1740: PUSH
1741: LD_INT 2
1743: PUSH
1744: EMPTY
1745: LIST
1746: LIST
1747: LIST
1748: LIST
1749: PUSH
1750: LD_INT 29
1752: PUSH
1753: LD_INT 118
1755: PUSH
1756: LD_INT 3
1758: PUSH
1759: LD_INT 4
1761: PUSH
1762: EMPTY
1763: LIST
1764: LIST
1765: LIST
1766: LIST
1767: PUSH
1768: LD_INT 6
1770: PUSH
1771: LD_INT 122
1773: PUSH
1774: LD_INT 12
1776: PUSH
1777: LD_INT 4
1779: PUSH
1780: EMPTY
1781: LIST
1782: LIST
1783: LIST
1784: LIST
1785: PUSH
1786: LD_INT 3
1788: PUSH
1789: LD_INT 118
1791: PUSH
1792: LD_INT 18
1794: PUSH
1795: LD_INT 3
1797: PUSH
1798: EMPTY
1799: LIST
1800: LIST
1801: LIST
1802: LIST
1803: PUSH
1804: LD_INT 5
1806: PUSH
1807: LD_INT 108
1809: PUSH
1810: LD_INT 13
1812: PUSH
1813: LD_INT 1
1815: PUSH
1816: EMPTY
1817: LIST
1818: LIST
1819: LIST
1820: LIST
1821: PUSH
1822: LD_INT 32
1824: PUSH
1825: LD_INT 117
1827: PUSH
1828: LD_INT 27
1830: PUSH
1831: LD_INT 0
1833: PUSH
1834: EMPTY
1835: LIST
1836: LIST
1837: LIST
1838: LIST
1839: PUSH
1840: LD_INT 32
1842: PUSH
1843: LD_INT 126
1845: PUSH
1846: LD_INT 30
1848: PUSH
1849: LD_INT 0
1851: PUSH
1852: EMPTY
1853: LIST
1854: LIST
1855: LIST
1856: LIST
1857: PUSH
1858: LD_INT 17
1860: PUSH
1861: LD_INT 118
1863: PUSH
1864: LD_INT 14
1866: PUSH
1867: LD_INT 3
1869: PUSH
1870: EMPTY
1871: LIST
1872: LIST
1873: LIST
1874: LIST
1875: PUSH
1876: LD_INT 16
1878: PUSH
1879: LD_INT 121
1881: PUSH
1882: LD_INT 18
1884: PUSH
1885: LD_INT 4
1887: PUSH
1888: EMPTY
1889: LIST
1890: LIST
1891: LIST
1892: LIST
1893: PUSH
1894: EMPTY
1895: LIST
1896: LIST
1897: LIST
1898: LIST
1899: LIST
1900: LIST
1901: LIST
1902: LIST
1903: LIST
1904: PUSH
1905: LD_INT 1
1907: PUSH
1908: LD_INT 77
1910: PUSH
1911: LD_INT 134
1913: PUSH
1914: LD_INT 0
1916: PUSH
1917: EMPTY
1918: LIST
1919: LIST
1920: LIST
1921: LIST
1922: PUSH
1923: LD_INT 29
1925: PUSH
1926: LD_INT 72
1928: PUSH
1929: LD_INT 134
1931: PUSH
1932: LD_INT 0
1934: PUSH
1935: EMPTY
1936: LIST
1937: LIST
1938: LIST
1939: LIST
1940: PUSH
1941: LD_INT 6
1943: PUSH
1944: LD_INT 68
1946: PUSH
1947: LD_INT 127
1949: PUSH
1950: LD_INT 0
1952: PUSH
1953: EMPTY
1954: LIST
1955: LIST
1956: LIST
1957: LIST
1958: PUSH
1959: LD_INT 3
1961: PUSH
1962: LD_INT 64
1964: PUSH
1965: LD_INT 116
1967: PUSH
1968: LD_INT 2
1970: PUSH
1971: EMPTY
1972: LIST
1973: LIST
1974: LIST
1975: LIST
1976: PUSH
1977: LD_INT 5
1979: PUSH
1980: LD_INT 85
1982: PUSH
1983: LD_INT 136
1985: PUSH
1986: LD_INT 0
1988: PUSH
1989: EMPTY
1990: LIST
1991: LIST
1992: LIST
1993: LIST
1994: PUSH
1995: LD_INT 32
1997: PUSH
1998: LD_INT 91
2000: PUSH
2001: LD_INT 132
2003: PUSH
2004: LD_INT 3
2006: PUSH
2007: EMPTY
2008: LIST
2009: LIST
2010: LIST
2011: LIST
2012: PUSH
2013: LD_INT 32
2015: PUSH
2016: LD_INT 80
2018: PUSH
2019: LD_INT 124
2021: PUSH
2022: LD_INT 3
2024: PUSH
2025: EMPTY
2026: LIST
2027: LIST
2028: LIST
2029: LIST
2030: PUSH
2031: LD_INT 17
2033: PUSH
2034: LD_INT 61
2036: PUSH
2037: LD_INT 116
2039: PUSH
2040: LD_INT 1
2042: PUSH
2043: EMPTY
2044: LIST
2045: LIST
2046: LIST
2047: LIST
2048: PUSH
2049: LD_INT 16
2051: PUSH
2052: LD_INT 64
2054: PUSH
2055: LD_INT 120
2057: PUSH
2058: LD_INT 0
2060: PUSH
2061: EMPTY
2062: LIST
2063: LIST
2064: LIST
2065: LIST
2066: PUSH
2067: EMPTY
2068: LIST
2069: LIST
2070: LIST
2071: LIST
2072: LIST
2073: LIST
2074: LIST
2075: LIST
2076: LIST
2077: PUSH
2078: LD_INT 1
2080: PUSH
2081: LD_INT 164
2083: PUSH
2084: LD_INT 98
2086: PUSH
2087: LD_INT 4
2089: PUSH
2090: EMPTY
2091: LIST
2092: LIST
2093: LIST
2094: LIST
2095: PUSH
2096: LD_INT 29
2098: PUSH
2099: LD_INT 161
2101: PUSH
2102: LD_INT 89
2104: PUSH
2105: LD_INT 3
2107: PUSH
2108: EMPTY
2109: LIST
2110: LIST
2111: LIST
2112: LIST
2113: PUSH
2114: LD_INT 6
2116: PUSH
2117: LD_INT 177
2119: PUSH
2120: LD_INT 124
2122: PUSH
2123: LD_INT 3
2125: PUSH
2126: EMPTY
2127: LIST
2128: LIST
2129: LIST
2130: LIST
2131: PUSH
2132: LD_INT 3
2134: PUSH
2135: LD_INT 167
2137: PUSH
2138: LD_INT 107
2140: PUSH
2141: LD_INT 3
2143: PUSH
2144: EMPTY
2145: LIST
2146: LIST
2147: LIST
2148: LIST
2149: PUSH
2150: LD_INT 5
2152: PUSH
2153: LD_INT 159
2155: PUSH
2156: LD_INT 105
2158: PUSH
2159: LD_INT 0
2161: PUSH
2162: EMPTY
2163: LIST
2164: LIST
2165: LIST
2166: LIST
2167: PUSH
2168: LD_INT 32
2170: PUSH
2171: LD_INT 152
2173: PUSH
2174: LD_INT 94
2176: PUSH
2177: LD_INT 2
2179: PUSH
2180: EMPTY
2181: LIST
2182: LIST
2183: LIST
2184: LIST
2185: PUSH
2186: LD_INT 32
2188: PUSH
2189: LD_INT 158
2191: PUSH
2192: LD_INT 86
2194: PUSH
2195: LD_INT 3
2197: PUSH
2198: EMPTY
2199: LIST
2200: LIST
2201: LIST
2202: LIST
2203: PUSH
2204: LD_INT 17
2206: PUSH
2207: LD_INT 170
2209: PUSH
2210: LD_INT 107
2212: PUSH
2213: LD_INT 4
2215: PUSH
2216: EMPTY
2217: LIST
2218: LIST
2219: LIST
2220: LIST
2221: PUSH
2222: LD_INT 16
2224: PUSH
2225: LD_INT 167
2227: PUSH
2228: LD_INT 103
2230: PUSH
2231: LD_INT 3
2233: PUSH
2234: EMPTY
2235: LIST
2236: LIST
2237: LIST
2238: LIST
2239: PUSH
2240: EMPTY
2241: LIST
2242: LIST
2243: LIST
2244: LIST
2245: LIST
2246: LIST
2247: LIST
2248: LIST
2249: LIST
2250: PUSH
2251: EMPTY
2252: LIST
2253: LIST
2254: LIST
2255: LIST
2256: ST_TO_ADDR
// end ; end ;
2257: GO 2260
2259: POP
// end ;
2260: LD_VAR 0 1
2264: RET
// function set_shared_visions_and_alliances ; var i , j ; begin
2265: LD_INT 0
2267: PPUSH
2268: PPUSH
2269: PPUSH
// if def_shared_vision then
2270: LD_EXP 7
2274: IFFALSE 2339
// begin for i in Teams do
2276: LD_ADDR_VAR 0 2
2280: PUSH
2281: LD_EXP 25
2285: PUSH
2286: FOR_IN
2287: IFFALSE 2337
// for j = 2 to i do
2289: LD_ADDR_VAR 0 3
2293: PUSH
2294: DOUBLE
2295: LD_INT 2
2297: DEC
2298: ST_TO_ADDR
2299: LD_VAR 0 2
2303: PUSH
2304: FOR_TO
2305: IFFALSE 2333
// ChangeSideFog ( i [ j ] , i [ 1 ] ) ;
2307: LD_VAR 0 2
2311: PUSH
2312: LD_VAR 0 3
2316: ARRAY
2317: PPUSH
2318: LD_VAR 0 2
2322: PUSH
2323: LD_INT 1
2325: ARRAY
2326: PPUSH
2327: CALL_OW 343
2331: GO 2304
2333: POP
2334: POP
2335: GO 2286
2337: POP
2338: POP
// end ; for i := 1 to 8 do
2339: LD_ADDR_VAR 0 2
2343: PUSH
2344: DOUBLE
2345: LD_INT 1
2347: DEC
2348: ST_TO_ADDR
2349: LD_INT 8
2351: PUSH
2352: FOR_TO
2353: IFFALSE 2443
// for j := 1 to 8 do
2355: LD_ADDR_VAR 0 3
2359: PUSH
2360: DOUBLE
2361: LD_INT 1
2363: DEC
2364: ST_TO_ADDR
2365: LD_INT 8
2367: PUSH
2368: FOR_TO
2369: IFFALSE 2439
// if Side_Teams [ i ] = Side_Teams [ j ] then
2371: LD_EXP 24
2375: PUSH
2376: LD_VAR 0 2
2380: ARRAY
2381: PUSH
2382: LD_EXP 24
2386: PUSH
2387: LD_VAR 0 3
2391: ARRAY
2392: EQUAL
2393: IFFALSE 2417
// SetAttitude ( i , j , att_friend , true ) else
2395: LD_VAR 0 2
2399: PPUSH
2400: LD_VAR 0 3
2404: PPUSH
2405: LD_INT 1
2407: PPUSH
2408: LD_INT 1
2410: PPUSH
2411: CALL_OW 80
2415: GO 2437
// SetAttitude ( i , j , att_enemy , true ) ;
2417: LD_VAR 0 2
2421: PPUSH
2422: LD_VAR 0 3
2426: PPUSH
2427: LD_INT 2
2429: PPUSH
2430: LD_INT 1
2432: PPUSH
2433: CALL_OW 80
2437: GO 2368
2439: POP
2440: POP
2441: GO 2352
2443: POP
2444: POP
// end ;
2445: LD_VAR 0 1
2449: RET
// function prepare_people ( count , cl , x , y , r , var commander ) ; var i , h ; begin
2450: LD_INT 0
2452: PPUSH
2453: PPUSH
2454: PPUSH
// result := [ ] ;
2455: LD_ADDR_VAR 0 7
2459: PUSH
2460: EMPTY
2461: ST_TO_ADDR
// for i := 1 to count do
2462: LD_ADDR_VAR 0 8
2466: PUSH
2467: DOUBLE
2468: LD_INT 1
2470: DEC
2471: ST_TO_ADDR
2472: LD_VAR 0 1
2476: PUSH
2477: FOR_TO
2478: IFFALSE 2640
// begin uc_direction := Rand ( 0 , 5 ) ;
2480: LD_ADDR_OWVAR 24
2484: PUSH
2485: LD_INT 0
2487: PPUSH
2488: LD_INT 5
2490: PPUSH
2491: CALL_OW 12
2495: ST_TO_ADDR
// if commander then
2496: LD_FROM_VAR 0 6
2500: IFFALSE 2549
// begin PrepareHuman ( rand ( 1 , 2 ) , cl , initial_level + 2 ) ;
2502: LD_INT 1
2504: PPUSH
2505: LD_INT 2
2507: PPUSH
2508: CALL_OW 12
2512: PPUSH
2513: LD_VAR 0 2
2517: PPUSH
2518: LD_EXP 14
2522: PUSH
2523: LD_INT 2
2525: PLUS
2526: PPUSH
2527: CALL_OW 380
// hc_importance := 105 ;
2531: LD_ADDR_OWVAR 32
2535: PUSH
2536: LD_INT 105
2538: ST_TO_ADDR
// commander := false ;
2539: LD_VAR 0 6
2543: PUSH
2544: LD_INT 0
2546: ST_TO_ADDR
// end else
2547: GO 2582
// begin PrepareHuman ( rand ( 1 , 2 ) , cl , initial_level ) ;
2549: LD_INT 1
2551: PPUSH
2552: LD_INT 2
2554: PPUSH
2555: CALL_OW 12
2559: PPUSH
2560: LD_VAR 0 2
2564: PPUSH
2565: LD_EXP 14
2569: PPUSH
2570: CALL_OW 380
// hc_importance := 0 ;
2574: LD_ADDR_OWVAR 32
2578: PUSH
2579: LD_INT 0
2581: ST_TO_ADDR
// end ; h := CreateHuman ;
2582: LD_ADDR_VAR 0 9
2586: PUSH
2587: CALL_OW 44
2591: ST_TO_ADDR
// PlaceUnitXYR ( h , x , y , r , false ) ;
2592: LD_VAR 0 9
2596: PPUSH
2597: LD_VAR 0 3
2601: PPUSH
2602: LD_VAR 0 4
2606: PPUSH
2607: LD_VAR 0 5
2611: PPUSH
2612: LD_INT 0
2614: PPUSH
2615: CALL_OW 50
// result := result ^ [ h ] ;
2619: LD_ADDR_VAR 0 7
2623: PUSH
2624: LD_VAR 0 7
2628: PUSH
2629: LD_VAR 0 9
2633: PUSH
2634: EMPTY
2635: LIST
2636: ADD
2637: ST_TO_ADDR
// end ;
2638: GO 2477
2640: POP
2641: POP
// end ;
2642: LD_VAR 0 7
2646: RET
// export commander ; function prepare_side ( side ) ; var pos , x , y , i , r , sol , br , dep , neng , nsci , nmech , nsol ; begin
2647: LD_INT 0
2649: PPUSH
2650: PPUSH
2651: PPUSH
2652: PPUSH
2653: PPUSH
2654: PPUSH
2655: PPUSH
2656: PPUSH
2657: PPUSH
2658: PPUSH
2659: PPUSH
2660: PPUSH
2661: PPUSH
// pos := Side_Positions [ side ] ;
2662: LD_ADDR_VAR 0 3
2666: PUSH
2667: LD_EXP 26
2671: PUSH
2672: LD_VAR 0 1
2676: ARRAY
2677: ST_TO_ADDR
// uc_nation := Side_Nations [ side ] ;
2678: LD_ADDR_OWVAR 21
2682: PUSH
2683: LD_EXP 27
2687: PUSH
2688: LD_VAR 0 1
2692: ARRAY
2693: ST_TO_ADDR
// uc_side := side ;
2694: LD_ADDR_OWVAR 20
2698: PUSH
2699: LD_VAR 0 1
2703: ST_TO_ADDR
// bc_kind1 = b_lab_basic ;
2704: LD_ADDR_OWVAR 44
2708: PUSH
2709: LD_INT 9
2711: ST_TO_ADDR
// bc_kind2 = b_lab_basic ;
2712: LD_ADDR_OWVAR 45
2716: PUSH
2717: LD_INT 9
2719: ST_TO_ADDR
// for i in buildings_def [ pos ] do
2720: LD_ADDR_VAR 0 6
2724: PUSH
2725: LD_EXP 30
2729: PUSH
2730: LD_VAR 0 3
2734: ARRAY
2735: PUSH
2736: FOR_IN
2737: IFFALSE 2786
// begin bc_type = i [ 1 ] ;
2739: LD_ADDR_OWVAR 42
2743: PUSH
2744: LD_VAR 0 6
2748: PUSH
2749: LD_INT 1
2751: ARRAY
2752: ST_TO_ADDR
// CreateAndPlaceBuildingXYD ( i [ 2 ] , i [ 3 ] , i [ 4 ] ) ;
2753: LD_VAR 0 6
2757: PUSH
2758: LD_INT 2
2760: ARRAY
2761: PPUSH
2762: LD_VAR 0 6
2766: PUSH
2767: LD_INT 3
2769: ARRAY
2770: PPUSH
2771: LD_VAR 0 6
2775: PUSH
2776: LD_INT 4
2778: ARRAY
2779: PPUSH
2780: CALL_OW 47
// end ;
2784: GO 2736
2786: POP
2787: POP
// x := buildings_def [ pos ] [ 1 ] [ 2 ] ;
2788: LD_ADDR_VAR 0 4
2792: PUSH
2793: LD_EXP 30
2797: PUSH
2798: LD_VAR 0 3
2802: ARRAY
2803: PUSH
2804: LD_INT 1
2806: ARRAY
2807: PUSH
2808: LD_INT 2
2810: ARRAY
2811: ST_TO_ADDR
// y := buildings_def [ pos ] [ 1 ] [ 2 ] ;
2812: LD_ADDR_VAR 0 5
2816: PUSH
2817: LD_EXP 30
2821: PUSH
2822: LD_VAR 0 3
2826: ARRAY
2827: PUSH
2828: LD_INT 1
2830: ARRAY
2831: PUSH
2832: LD_INT 2
2834: ARRAY
2835: ST_TO_ADDR
// if is_depot then
2836: LD_EXP 12
2840: IFFALSE 2990
// begin dep = FilterAllUnits ( [ [ f_side , side ] , [ f_or , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) ;
2842: LD_ADDR_VAR 0 10
2846: PUSH
2847: LD_INT 22
2849: PUSH
2850: LD_VAR 0 1
2854: PUSH
2855: EMPTY
2856: LIST
2857: LIST
2858: PUSH
2859: LD_INT 2
2861: PUSH
2862: LD_INT 30
2864: PUSH
2865: LD_INT 0
2867: PUSH
2868: EMPTY
2869: LIST
2870: LIST
2871: PUSH
2872: LD_INT 30
2874: PUSH
2875: LD_INT 1
2877: PUSH
2878: EMPTY
2879: LIST
2880: LIST
2881: PUSH
2882: EMPTY
2883: LIST
2884: LIST
2885: LIST
2886: PUSH
2887: EMPTY
2888: LIST
2889: LIST
2890: PPUSH
2891: CALL_OW 69
2895: ST_TO_ADDR
// dep = dep [ 1 ] ;
2896: LD_ADDR_VAR 0 10
2900: PUSH
2901: LD_VAR 0 10
2905: PUSH
2906: LD_INT 1
2908: ARRAY
2909: ST_TO_ADDR
// SetResourceType ( GetBase ( dep ) , mat_cans , starting_resources [ mat_cans ] ) ;
2910: LD_VAR 0 10
2914: PPUSH
2915: CALL_OW 274
2919: PPUSH
2920: LD_INT 1
2922: PPUSH
2923: LD_EXP 16
2927: PUSH
2928: LD_INT 1
2930: ARRAY
2931: PPUSH
2932: CALL_OW 277
// SetResourceType ( GetBase ( dep ) , mat_oil , starting_resources [ mat_oil ] ) ;
2936: LD_VAR 0 10
2940: PPUSH
2941: CALL_OW 274
2945: PPUSH
2946: LD_INT 2
2948: PPUSH
2949: LD_EXP 16
2953: PUSH
2954: LD_INT 2
2956: ARRAY
2957: PPUSH
2958: CALL_OW 277
// SetResourceType ( GetBase ( dep ) , mat_siberit , starting_resources [ mat_siberit ] ) ;
2962: LD_VAR 0 10
2966: PPUSH
2967: CALL_OW 274
2971: PPUSH
2972: LD_INT 3
2974: PPUSH
2975: LD_EXP 16
2979: PUSH
2980: LD_INT 3
2982: ARRAY
2983: PPUSH
2984: CALL_OW 277
// end else
2988: GO 3134
// begin for i := 1 to 3 do
2990: LD_ADDR_VAR 0 6
2994: PUSH
2995: DOUBLE
2996: LD_INT 1
2998: DEC
2999: ST_TO_ADDR
3000: LD_INT 3
3002: PUSH
3003: FOR_TO
3004: IFFALSE 3132
// begin r := starting_resources [ i ] ;
3006: LD_ADDR_VAR 0 7
3010: PUSH
3011: LD_EXP 16
3015: PUSH
3016: LD_VAR 0 6
3020: ARRAY
3021: ST_TO_ADDR
// while r >= 10 do
3022: LD_VAR 0 7
3026: PUSH
3027: LD_INT 10
3029: GREATEREQUAL
3030: IFFALSE 3130
// if r > 50 then
3032: LD_VAR 0 7
3036: PUSH
3037: LD_INT 50
3039: GREATER
3040: IFFALSE 3086
// begin CreateResourcesXYR ( i , 5 , x , y , 4 , false ) ;
3042: LD_VAR 0 6
3046: PPUSH
3047: LD_INT 5
3049: PPUSH
3050: LD_VAR 0 4
3054: PPUSH
3055: LD_VAR 0 5
3059: PPUSH
3060: LD_INT 4
3062: PPUSH
3063: LD_INT 0
3065: PPUSH
3066: CALL_OW 60
// r := r - 50 ;
3070: LD_ADDR_VAR 0 7
3074: PUSH
3075: LD_VAR 0 7
3079: PUSH
3080: LD_INT 50
3082: MINUS
3083: ST_TO_ADDR
// end else
3084: GO 3128
// begin CreateResourcesXYR ( i , r div 10 , x , y , 4 , false ) ;
3086: LD_VAR 0 6
3090: PPUSH
3091: LD_VAR 0 7
3095: PUSH
3096: LD_INT 10
3098: DIV
3099: PPUSH
3100: LD_VAR 0 4
3104: PPUSH
3105: LD_VAR 0 5
3109: PPUSH
3110: LD_INT 4
3112: PPUSH
3113: LD_INT 0
3115: PPUSH
3116: CALL_OW 60
// r := 0 ;
3120: LD_ADDR_VAR 0 7
3124: PUSH
3125: LD_INT 0
3127: ST_TO_ADDR
// end ;
3128: GO 3022
// end ;
3130: GO 3003
3132: POP
3133: POP
// end ; x := start_def [ pos ] [ 1 ] ;
3134: LD_ADDR_VAR 0 4
3138: PUSH
3139: LD_EXP 31
3143: PUSH
3144: LD_VAR 0 3
3148: ARRAY
3149: PUSH
3150: LD_INT 1
3152: ARRAY
3153: ST_TO_ADDR
// y := start_def [ pos ] [ 2 ] ;
3154: LD_ADDR_VAR 0 5
3158: PUSH
3159: LD_EXP 31
3163: PUSH
3164: LD_VAR 0 3
3168: ARRAY
3169: PUSH
3170: LD_INT 2
3172: ARRAY
3173: ST_TO_ADDR
// if def_morale_flags then
3174: LD_EXP 8
3178: IFFALSE 3201
// SetBattleFlag ( side , x , y , [ ] ) ;
3180: LD_VAR 0 1
3184: PPUSH
3185: LD_VAR 0 4
3189: PPUSH
3190: LD_VAR 0 5
3194: PPUSH
3195: EMPTY
3196: PPUSH
3197: CALL_OW 418
// neng := number_of_people ;
3201: LD_ADDR_VAR 0 11
3205: PUSH
3206: LD_EXP 13
3210: ST_TO_ADDR
// nsol := 2 ;
3211: LD_ADDR_VAR 0 14
3215: PUSH
3216: LD_INT 2
3218: ST_TO_ADDR
// if nsol < neng div 4 then
3219: LD_VAR 0 14
3223: PUSH
3224: LD_VAR 0 11
3228: PUSH
3229: LD_INT 4
3231: DIV
3232: LESS
3233: IFFALSE 3249
// nsol := neng div 4 ;
3235: LD_ADDR_VAR 0 14
3239: PUSH
3240: LD_VAR 0 11
3244: PUSH
3245: LD_INT 4
3247: DIV
3248: ST_TO_ADDR
// neng := neng - nsol ;
3249: LD_ADDR_VAR 0 11
3253: PUSH
3254: LD_VAR 0 11
3258: PUSH
3259: LD_VAR 0 14
3263: MINUS
3264: ST_TO_ADDR
// nsci := neng div 3 ;
3265: LD_ADDR_VAR 0 12
3269: PUSH
3270: LD_VAR 0 11
3274: PUSH
3275: LD_INT 3
3277: DIV
3278: ST_TO_ADDR
// if nsci < 1 then
3279: LD_VAR 0 12
3283: PUSH
3284: LD_INT 1
3286: LESS
3287: IFFALSE 3297
// nsci := 1 ;
3289: LD_ADDR_VAR 0 12
3293: PUSH
3294: LD_INT 1
3296: ST_TO_ADDR
// neng := neng - nsci ;
3297: LD_ADDR_VAR 0 11
3301: PUSH
3302: LD_VAR 0 11
3306: PUSH
3307: LD_VAR 0 12
3311: MINUS
3312: ST_TO_ADDR
// nmech := neng div 2 ;
3313: LD_ADDR_VAR 0 13
3317: PUSH
3318: LD_VAR 0 11
3322: PUSH
3323: LD_INT 2
3325: DIV
3326: ST_TO_ADDR
// neng := neng - nmech ;
3327: LD_ADDR_VAR 0 11
3331: PUSH
3332: LD_VAR 0 11
3336: PUSH
3337: LD_VAR 0 13
3341: MINUS
3342: ST_TO_ADDR
// if neng < 1 then
3343: LD_VAR 0 11
3347: PUSH
3348: LD_INT 1
3350: LESS
3351: IFFALSE 3361
// neng := 1 ;
3353: LD_ADDR_VAR 0 11
3357: PUSH
3358: LD_INT 1
3360: ST_TO_ADDR
// commander := true ;
3361: LD_ADDR_EXP 32
3365: PUSH
3366: LD_INT 1
3368: ST_TO_ADDR
// x := start_def [ pos ] [ 1 ] ;
3369: LD_ADDR_VAR 0 4
3373: PUSH
3374: LD_EXP 31
3378: PUSH
3379: LD_VAR 0 3
3383: ARRAY
3384: PUSH
3385: LD_INT 1
3387: ARRAY
3388: ST_TO_ADDR
// y := start_def [ pos ] [ 2 ] ;
3389: LD_ADDR_VAR 0 5
3393: PUSH
3394: LD_EXP 31
3398: PUSH
3399: LD_VAR 0 3
3403: ARRAY
3404: PUSH
3405: LD_INT 2
3407: ARRAY
3408: ST_TO_ADDR
// prepare_people ( nsol , class_soldier , x , y , 5 , commander ) ;
3409: LD_VAR 0 14
3413: PPUSH
3414: LD_INT 1
3416: PPUSH
3417: LD_VAR 0 4
3421: PPUSH
3422: LD_VAR 0 5
3426: PPUSH
3427: LD_INT 5
3429: PPUSH
3430: LD_ADDR_EXP 32
3434: PPUSH
3435: CALL 2450 0 6
// prepare_people ( neng , class_engineer , x , y , 5 , commander ) ;
3439: LD_VAR 0 11
3443: PPUSH
3444: LD_INT 2
3446: PPUSH
3447: LD_VAR 0 4
3451: PPUSH
3452: LD_VAR 0 5
3456: PPUSH
3457: LD_INT 5
3459: PPUSH
3460: LD_ADDR_EXP 32
3464: PPUSH
3465: CALL 2450 0 6
// prepare_people ( nsci , class_scientistic , x , y , 5 , commander ) ;
3469: LD_VAR 0 12
3473: PPUSH
3474: LD_INT 4
3476: PPUSH
3477: LD_VAR 0 4
3481: PPUSH
3482: LD_VAR 0 5
3486: PPUSH
3487: LD_INT 5
3489: PPUSH
3490: LD_ADDR_EXP 32
3494: PPUSH
3495: CALL 2450 0 6
// prepare_people ( nmech , class_mechanic , x , y , 5 , commander ) ;
3499: LD_VAR 0 13
3503: PPUSH
3504: LD_INT 3
3506: PPUSH
3507: LD_VAR 0 4
3511: PPUSH
3512: LD_VAR 0 5
3516: PPUSH
3517: LD_INT 5
3519: PPUSH
3520: LD_ADDR_EXP 32
3524: PPUSH
3525: CALL 2450 0 6
// if def_siberite_detection then
3529: LD_EXP 9
3533: IFFALSE 3550
// SetTech ( tech_SibDet , side , 3 ) ;
3535: LD_INT 20
3537: PPUSH
3538: LD_VAR 0 1
3542: PPUSH
3543: LD_INT 3
3545: PPUSH
3546: CALL_OW 322
// end ;
3550: LD_VAR 0 2
3554: RET
// function prepare_sides ; var i ; begin
3555: LD_INT 0
3557: PPUSH
3558: PPUSH
// for i := 1 to 8 do
3559: LD_ADDR_VAR 0 2
3563: PUSH
3564: DOUBLE
3565: LD_INT 1
3567: DEC
3568: ST_TO_ADDR
3569: LD_INT 8
3571: PUSH
3572: FOR_TO
3573: IFFALSE 3724
// if Side_Positions [ i ] then
3575: LD_EXP 26
3579: PUSH
3580: LD_VAR 0 2
3584: ARRAY
3585: IFFALSE 3722
// begin if def_base_level > 1 then
3587: LD_EXP 2
3591: PUSH
3592: LD_INT 1
3594: GREATER
3595: IFFALSE 3713
// case Side_Positions [ i ] of 1 :
3597: LD_EXP 26
3601: PUSH
3602: LD_VAR 0 2
3606: ARRAY
3607: PUSH
3608: LD_INT 1
3610: DOUBLE
3611: EQUAL
3612: IFTRUE 3616
3614: GO 3634
3616: POP
// SetResourceVisibility ( 5 , 4 , i ) ; 2 :
3617: LD_INT 5
3619: PPUSH
3620: LD_INT 4
3622: PPUSH
3623: LD_VAR 0 2
3627: PPUSH
3628: CALL_OW 441
3632: GO 3713
3634: LD_INT 2
3636: DOUBLE
3637: EQUAL
3638: IFTRUE 3642
3640: GO 3660
3642: POP
// SetResourceVisibility ( 118 , 3 , i ) ; 3 :
3643: LD_INT 118
3645: PPUSH
3646: LD_INT 3
3648: PPUSH
3649: LD_VAR 0 2
3653: PPUSH
3654: CALL_OW 441
3658: GO 3713
3660: LD_INT 3
3662: DOUBLE
3663: EQUAL
3664: IFTRUE 3668
3666: GO 3686
3668: POP
// SetResourceVisibility ( 72 , 134 , i ) ; 4 :
3669: LD_INT 72
3671: PPUSH
3672: LD_INT 134
3674: PPUSH
3675: LD_VAR 0 2
3679: PPUSH
3680: CALL_OW 441
3684: GO 3713
3686: LD_INT 4
3688: DOUBLE
3689: EQUAL
3690: IFTRUE 3694
3692: GO 3712
3694: POP
// SetResourceVisibility ( 161 , 89 , i ) ; end ;
3695: LD_INT 161
3697: PPUSH
3698: LD_INT 89
3700: PPUSH
3701: LD_VAR 0 2
3705: PPUSH
3706: CALL_OW 441
3710: GO 3713
3712: POP
// prepare_side ( i ) ;
3713: LD_VAR 0 2
3717: PPUSH
3718: CALL 2647 0 1
// end ;
3722: GO 3572
3724: POP
3725: POP
// end ;
3726: LD_VAR 0 1
3730: RET
// function prepare_apemen ; var i , ape_names , n1 , n2 , ape ; begin
3731: LD_INT 0
3733: PPUSH
3734: PPUSH
3735: PPUSH
3736: PPUSH
3737: PPUSH
3738: PPUSH
// if number_of_apemen = 0 then
3739: LD_EXP 18
3743: PUSH
3744: LD_INT 0
3746: EQUAL
3747: IFFALSE 3751
// exit ;
3749: GO 4190
// ape_names = [ Tupoun , Opoce , Opka , Butrus , Bubu , Condor , Kuklajs , Simon , Ugh , Urgh , Argh , Aargh , Hrumph , Grumph , Oorg , Eghrr , Rrrr , Bark , Wraughrr , :-) , Semik , Hrgh , Hur , Yeargh , Marta , Batman , Barkman , Xcenovsk , David Love , Freon , Stoupik , Quik , Jam Prckovic Laren , CFC , Kvakous , Sumys , Agent , Nazghul , Havran , Vrana , Havranek ] ;
3751: LD_ADDR_VAR 0 3
3755: PUSH
3756: LD_STRING Tupoun
3758: PUSH
3759: LD_STRING Opoce
3761: PUSH
3762: LD_STRING Opka
3764: PUSH
3765: LD_STRING Butrus
3767: PUSH
3768: LD_STRING Bubu
3770: PUSH
3771: LD_STRING Condor
3773: PUSH
3774: LD_STRING Kuklajs
3776: PUSH
3777: LD_STRING Simon
3779: PUSH
3780: LD_STRING Ugh
3782: PUSH
3783: LD_STRING Urgh
3785: PUSH
3786: LD_STRING Argh
3788: PUSH
3789: LD_STRING Aargh
3791: PUSH
3792: LD_STRING Hrumph
3794: PUSH
3795: LD_STRING Grumph
3797: PUSH
3798: LD_STRING Oorg
3800: PUSH
3801: LD_STRING Eghrr
3803: PUSH
3804: LD_STRING Rrrr
3806: PUSH
3807: LD_STRING Bark
3809: PUSH
3810: LD_STRING Wraughrr
3812: PUSH
3813: LD_STRING :-)
3815: PUSH
3816: LD_STRING Semik
3818: PUSH
3819: LD_STRING Hrgh
3821: PUSH
3822: LD_STRING Hur
3824: PUSH
3825: LD_STRING Yeargh
3827: PUSH
3828: LD_STRING Marta
3830: PUSH
3831: LD_STRING Batman
3833: PUSH
3834: LD_STRING Barkman
3836: PUSH
3837: LD_STRING Xcenovsk
3839: PUSH
3840: LD_STRING David Love
3842: PUSH
3843: LD_STRING Freon
3845: PUSH
3846: LD_STRING Stoupik
3848: PUSH
3849: LD_STRING Quik
3851: PUSH
3852: LD_STRING Jam Prckovic Laren
3854: PUSH
3855: LD_STRING CFC
3857: PUSH
3858: LD_STRING Kvakous
3860: PUSH
3861: LD_STRING Sumys
3863: PUSH
3864: LD_STRING Agent
3866: PUSH
3867: LD_STRING Nazghul
3869: PUSH
3870: LD_STRING Havran
3872: PUSH
3873: LD_STRING Vrana
3875: PUSH
3876: LD_STRING Havranek
3878: PUSH
3879: EMPTY
3880: LIST
3881: LIST
3882: LIST
3883: LIST
3884: LIST
3885: LIST
3886: LIST
3887: LIST
3888: LIST
3889: LIST
3890: LIST
3891: LIST
3892: LIST
3893: LIST
3894: LIST
3895: LIST
3896: LIST
3897: LIST
3898: LIST
3899: LIST
3900: LIST
3901: LIST
3902: LIST
3903: LIST
3904: LIST
3905: LIST
3906: LIST
3907: LIST
3908: LIST
3909: LIST
3910: LIST
3911: LIST
3912: LIST
3913: LIST
3914: LIST
3915: LIST
3916: LIST
3917: LIST
3918: LIST
3919: LIST
3920: LIST
3921: ST_TO_ADDR
// for i := 1 to number_of_apemen do
3922: LD_ADDR_VAR 0 2
3926: PUSH
3927: DOUBLE
3928: LD_INT 1
3930: DEC
3931: ST_TO_ADDR
3932: LD_EXP 18
3936: PUSH
3937: FOR_TO
3938: IFFALSE 4188
// begin uc_side := 0 ;
3940: LD_ADDR_OWVAR 20
3944: PUSH
3945: LD_INT 0
3947: ST_TO_ADDR
// uc_nation := nation_nature ;
3948: LD_ADDR_OWVAR 21
3952: PUSH
3953: LD_INT 0
3955: ST_TO_ADDR
// hc_class := class_apeman ;
3956: LD_ADDR_OWVAR 28
3960: PUSH
3961: LD_INT 12
3963: ST_TO_ADDR
// hc_basic_skills := [ 1 , 1 , 1 , 1 ] ;
3964: LD_ADDR_OWVAR 30
3968: PUSH
3969: LD_INT 1
3971: PUSH
3972: LD_INT 1
3974: PUSH
3975: LD_INT 1
3977: PUSH
3978: LD_INT 1
3980: PUSH
3981: EMPTY
3982: LIST
3983: LIST
3984: LIST
3985: LIST
3986: ST_TO_ADDR
// hc_skills := [ initial_level + Rand ( 1 , 5 ) - 3 , initial_level + Rand ( 1 , 5 ) - 3 , initial_level + Rand ( 1 , 5 ) - 3 , initial_level + Rand ( 1 , 5 ) - 3 ] ;
3987: LD_ADDR_OWVAR 31
3991: PUSH
3992: LD_EXP 14
3996: PUSH
3997: LD_INT 1
3999: PPUSH
4000: LD_INT 5
4002: PPUSH
4003: CALL_OW 12
4007: PLUS
4008: PUSH
4009: LD_INT 3
4011: MINUS
4012: PUSH
4013: LD_EXP 14
4017: PUSH
4018: LD_INT 1
4020: PPUSH
4021: LD_INT 5
4023: PPUSH
4024: CALL_OW 12
4028: PLUS
4029: PUSH
4030: LD_INT 3
4032: MINUS
4033: PUSH
4034: LD_EXP 14
4038: PUSH
4039: LD_INT 1
4041: PPUSH
4042: LD_INT 5
4044: PPUSH
4045: CALL_OW 12
4049: PLUS
4050: PUSH
4051: LD_INT 3
4053: MINUS
4054: PUSH
4055: LD_EXP 14
4059: PUSH
4060: LD_INT 1
4062: PPUSH
4063: LD_INT 5
4065: PPUSH
4066: CALL_OW 12
4070: PLUS
4071: PUSH
4072: LD_INT 3
4074: MINUS
4075: PUSH
4076: EMPTY
4077: LIST
4078: LIST
4079: LIST
4080: LIST
4081: ST_TO_ADDR
// hc_attr := [ 10 , 12 ] ;
4082: LD_ADDR_OWVAR 29
4086: PUSH
4087: LD_INT 10
4089: PUSH
4090: LD_INT 12
4092: PUSH
4093: EMPTY
4094: LIST
4095: LIST
4096: ST_TO_ADDR
// hc_sex := sex_male ;
4097: LD_ADDR_OWVAR 27
4101: PUSH
4102: LD_INT 1
4104: ST_TO_ADDR
// n1 := ape_names [ Rand ( 1 , ape_names ) ] ;
4105: LD_ADDR_VAR 0 4
4109: PUSH
4110: LD_VAR 0 3
4114: PUSH
4115: LD_INT 1
4117: PPUSH
4118: LD_VAR 0 3
4122: PPUSH
4123: CALL_OW 12
4127: ARRAY
4128: ST_TO_ADDR
// hc_name := n1 ;
4129: LD_ADDR_OWVAR 26
4133: PUSH
4134: LD_VAR 0 4
4138: ST_TO_ADDR
// hc_importance := 0 ;
4139: LD_ADDR_OWVAR 32
4143: PUSH
4144: LD_INT 0
4146: ST_TO_ADDR
// hc_agressivity := Rand ( - 50 , 50 ) ;
4147: LD_ADDR_OWVAR 35
4151: PUSH
4152: LD_INT 50
4154: NEG
4155: PPUSH
4156: LD_INT 50
4158: PPUSH
4159: CALL_OW 12
4163: ST_TO_ADDR
// ape := CreateHuman ;
4164: LD_ADDR_VAR 0 6
4168: PUSH
4169: CALL_OW 44
4173: ST_TO_ADDR
// PlaceUnitAnywhere ( ape , false ) ;
4174: LD_VAR 0 6
4178: PPUSH
4179: LD_INT 0
4181: PPUSH
4182: CALL_OW 51
// end ;
4186: GO 3937
4188: POP
4189: POP
// end ;
4190: LD_VAR 0 1
4194: RET
// starting begin mp_selectmsg := true ;
4195: LD_ADDR_OWVAR 13
4199: PUSH
4200: LD_INT 1
4202: ST_TO_ADDR
// read_multiplayer_and_game_parameters ;
4203: CALL 0 0 0
// prepare_map_coordinates ;
4207: CALL 788 0 0
// set_shared_visions_and_alliances ;
4211: CALL 2265 0 0
// prepare_sides ;
4215: CALL 3555 0 0
// prepare_apemen ;
4219: CALL 3731 0 0
// init_shipments_and_respawning ;
4223: CALL 4971 0 0
// umisti_flagy ;
4227: CALL 4288 0 0
// your_side := Player_Side ;
4231: LD_ADDR_OWVAR 2
4235: PUSH
4236: LD_EXP 22
4240: ST_TO_ADDR
// CenterNowOnXY ( start_def [ Side_Positions [ your_side ] ] [ 1 ] , start_def [ Side_Positions [ your_side ] ] [ 2 ] ) ;
4241: LD_EXP 31
4245: PUSH
4246: LD_EXP 26
4250: PUSH
4251: LD_OWVAR 2
4255: ARRAY
4256: ARRAY
4257: PUSH
4258: LD_INT 1
4260: ARRAY
4261: PPUSH
4262: LD_EXP 31
4266: PUSH
4267: LD_EXP 26
4271: PUSH
4272: LD_OWVAR 2
4276: ARRAY
4277: ARRAY
4278: PUSH
4279: LD_INT 2
4281: ARRAY
4282: PPUSH
4283: CALL_OW 86
// end ; end_of_file
4287: END
// export FLAGY ; var FLAGY_AREA ; var FLAGY_AREA1 ; export function umisti_flagy ; begin
4288: LD_INT 0
4290: PPUSH
// FLAGY = [ 0 , 0 , 0 , 0 , 0 ] ;
4291: LD_ADDR_EXP 33
4295: PUSH
4296: LD_INT 0
4298: PUSH
4299: LD_INT 0
4301: PUSH
4302: LD_INT 0
4304: PUSH
4305: LD_INT 0
4307: PUSH
4308: LD_INT 0
4310: PUSH
4311: EMPTY
4312: LIST
4313: LIST
4314: LIST
4315: LIST
4316: LIST
4317: ST_TO_ADDR
// FLAGY_AREA = [ F1 , F2 , F3 , F4 , F5 ] ;
4318: LD_ADDR_LOC 1
4322: PUSH
4323: LD_INT 1
4325: PUSH
4326: LD_INT 2
4328: PUSH
4329: LD_INT 3
4331: PUSH
4332: LD_INT 4
4334: PUSH
4335: LD_INT 5
4337: PUSH
4338: EMPTY
4339: LIST
4340: LIST
4341: LIST
4342: LIST
4343: LIST
4344: ST_TO_ADDR
// FLAGY_AREA1 = [ F11 , F22 , F33 , F44 , F55 ] ;
4345: LD_ADDR_LOC 2
4349: PUSH
4350: LD_INT 10
4352: PUSH
4353: LD_INT 11
4355: PUSH
4356: LD_INT 12
4358: PUSH
4359: LD_INT 13
4361: PUSH
4362: LD_INT 14
4364: PUSH
4365: EMPTY
4366: LIST
4367: LIST
4368: LIST
4369: LIST
4370: LIST
4371: ST_TO_ADDR
// SetBattleFlag ( Neutral , 78 , 22 , [ ] ) ;
4372: LD_EXP 1
4376: PPUSH
4377: LD_INT 78
4379: PPUSH
4380: LD_INT 22
4382: PPUSH
4383: EMPTY
4384: PPUSH
4385: CALL_OW 418
// SetBattleFlag ( Neutral , 139 , 74 , [ ] ) ;
4389: LD_EXP 1
4393: PPUSH
4394: LD_INT 139
4396: PPUSH
4397: LD_INT 74
4399: PPUSH
4400: EMPTY
4401: PPUSH
4402: CALL_OW 418
// SetBattleFlag ( Neutral , 74 , 68 , [ ] ) ;
4406: LD_EXP 1
4410: PPUSH
4411: LD_INT 74
4413: PPUSH
4414: LD_INT 68
4416: PPUSH
4417: EMPTY
4418: PPUSH
4419: CALL_OW 418
// SetBattleFlag ( Neutral , 40 , 62 , [ ] ) ;
4423: LD_EXP 1
4427: PPUSH
4428: LD_INT 40
4430: PPUSH
4431: LD_INT 62
4433: PPUSH
4434: EMPTY
4435: PPUSH
4436: CALL_OW 418
// SetBattleFlag ( Neutral , 79 , 97 , [ ] ) ;
4440: LD_EXP 1
4444: PPUSH
4445: LD_INT 79
4447: PPUSH
4448: LD_INT 97
4450: PPUSH
4451: EMPTY
4452: PPUSH
4453: CALL_OW 418
// end ;
4457: LD_VAR 0 1
4461: RET
// every 0 0$1 do var i , pom , pom1 ; var side ;
4462: GO 4464
4464: DISABLE
4465: LD_INT 0
4467: PPUSH
4468: PPUSH
4469: PPUSH
4470: PPUSH
// begin for i := 1 to 5 do
4471: LD_ADDR_VAR 0 1
4475: PUSH
4476: DOUBLE
4477: LD_INT 1
4479: DEC
4480: ST_TO_ADDR
4481: LD_INT 5
4483: PUSH
4484: FOR_TO
4485: IFFALSE 4799
// begin side = 0 ;
4487: LD_ADDR_VAR 0 4
4491: PUSH
4492: LD_INT 0
4494: ST_TO_ADDR
// pom = FilterUnitsInArea ( FLAGY_AREA [ i ] , [ [ f_type , unit_human ] ] ) ;
4495: LD_ADDR_VAR 0 2
4499: PUSH
4500: LD_LOC 1
4504: PUSH
4505: LD_VAR 0 1
4509: ARRAY
4510: PPUSH
4511: LD_INT 21
4513: PUSH
4514: LD_INT 1
4516: PUSH
4517: EMPTY
4518: LIST
4519: LIST
4520: PUSH
4521: EMPTY
4522: LIST
4523: PPUSH
4524: CALL_OW 70
4528: ST_TO_ADDR
// if pom > 0 then
4529: LD_VAR 0 2
4533: PUSH
4534: LD_INT 0
4536: GREATER
4537: IFFALSE 4797
// begin side = GetSide ( pom [ 1 ] ) ;
4539: LD_ADDR_VAR 0 4
4543: PUSH
4544: LD_VAR 0 2
4548: PUSH
4549: LD_INT 1
4551: ARRAY
4552: PPUSH
4553: CALL_OW 255
4557: ST_TO_ADDR
// pom1 = FilterUnitsInArea ( FLAGY_AREA1 [ i ] , [ [ f_side , side ] , [ f_type , unit_building ] ] ) ;
4558: LD_ADDR_VAR 0 3
4562: PUSH
4563: LD_LOC 2
4567: PUSH
4568: LD_VAR 0 1
4572: ARRAY
4573: PPUSH
4574: LD_INT 22
4576: PUSH
4577: LD_VAR 0 4
4581: PUSH
4582: EMPTY
4583: LIST
4584: LIST
4585: PUSH
4586: LD_INT 21
4588: PUSH
4589: LD_INT 3
4591: PUSH
4592: EMPTY
4593: LIST
4594: LIST
4595: PUSH
4596: EMPTY
4597: LIST
4598: LIST
4599: PPUSH
4600: CALL_OW 70
4604: ST_TO_ADDR
// if pom1 > 0 and budovy_ok ( pom1 ) then
4605: LD_VAR 0 3
4609: PUSH
4610: LD_INT 0
4612: GREATER
4613: PUSH
4614: LD_VAR 0 3
4618: PPUSH
4619: CALL 4906 0 1
4623: AND
4624: IFFALSE 4797
// begin FLAGY = vloz_na_pozici ( side , i , FLAGY ) ;
4626: LD_ADDR_EXP 33
4630: PUSH
4631: LD_VAR 0 4
4635: PPUSH
4636: LD_VAR 0 1
4640: PPUSH
4641: LD_EXP 33
4645: PPUSH
4646: CALL 4805 0 3
4650: ST_TO_ADDR
// case i of 1 :
4651: LD_VAR 0 1
4655: PUSH
4656: LD_INT 1
4658: DOUBLE
4659: EQUAL
4660: IFTRUE 4664
4662: GO 4684
4664: POP
// SetBattleFlag ( side , 78 , 22 , [ ] ) ; 2 :
4665: LD_VAR 0 4
4669: PPUSH
4670: LD_INT 78
4672: PPUSH
4673: LD_INT 22
4675: PPUSH
4676: EMPTY
4677: PPUSH
4678: CALL_OW 418
4682: GO 4797
4684: LD_INT 2
4686: DOUBLE
4687: EQUAL
4688: IFTRUE 4692
4690: GO 4712
4692: POP
// SetBattleFlag ( side , 139 , 74 , [ ] ) ; 3 :
4693: LD_VAR 0 4
4697: PPUSH
4698: LD_INT 139
4700: PPUSH
4701: LD_INT 74
4703: PPUSH
4704: EMPTY
4705: PPUSH
4706: CALL_OW 418
4710: GO 4797
4712: LD_INT 3
4714: DOUBLE
4715: EQUAL
4716: IFTRUE 4720
4718: GO 4740
4720: POP
// SetBattleFlag ( side , 74 , 68 , [ ] ) ; 4 :
4721: LD_VAR 0 4
4725: PPUSH
4726: LD_INT 74
4728: PPUSH
4729: LD_INT 68
4731: PPUSH
4732: EMPTY
4733: PPUSH
4734: CALL_OW 418
4738: GO 4797
4740: LD_INT 4
4742: DOUBLE
4743: EQUAL
4744: IFTRUE 4748
4746: GO 4768
4748: POP
// SetBattleFlag ( side , 40 , 62 , [ ] ) ; 5 :
4749: LD_VAR 0 4
4753: PPUSH
4754: LD_INT 40
4756: PPUSH
4757: LD_INT 62
4759: PPUSH
4760: EMPTY
4761: PPUSH
4762: CALL_OW 418
4766: GO 4797
4768: LD_INT 5
4770: DOUBLE
4771: EQUAL
4772: IFTRUE 4776
4774: GO 4796
4776: POP
// SetBattleFlag ( side , 79 , 97 , [ ] ) ; end ;
4777: LD_VAR 0 4
4781: PPUSH
4782: LD_INT 79
4784: PPUSH
4785: LD_INT 97
4787: PPUSH
4788: EMPTY
4789: PPUSH
4790: CALL_OW 418
4794: GO 4797
4796: POP
// end ; end ; end ;
4797: GO 4484
4799: POP
4800: POP
// enable ;
4801: ENABLE
// end ;
4802: PPOPN 4
4804: END
// export function vloz_na_pozici ( co , cislo , pozice ) ; var ii ; var pom ; begin
4805: LD_INT 0
4807: PPUSH
4808: PPUSH
4809: PPUSH
// pom = [ ] ;
4810: LD_ADDR_VAR 0 6
4814: PUSH
4815: EMPTY
4816: ST_TO_ADDR
// for ii := 1 to pozice do
4817: LD_ADDR_VAR 0 5
4821: PUSH
4822: DOUBLE
4823: LD_INT 1
4825: DEC
4826: ST_TO_ADDR
4827: LD_VAR 0 3
4831: PUSH
4832: FOR_TO
4833: IFFALSE 4889
// if ii <> cislo then
4835: LD_VAR 0 5
4839: PUSH
4840: LD_VAR 0 2
4844: NONEQUAL
4845: IFFALSE 4871
// pom = pom ^ pozice [ ii ] else
4847: LD_ADDR_VAR 0 6
4851: PUSH
4852: LD_VAR 0 6
4856: PUSH
4857: LD_VAR 0 3
4861: PUSH
4862: LD_VAR 0 5
4866: ARRAY
4867: ADD
4868: ST_TO_ADDR
4869: GO 4887
// pom = pom ^ co ;
4871: LD_ADDR_VAR 0 6
4875: PUSH
4876: LD_VAR 0 6
4880: PUSH
4881: LD_VAR 0 1
4885: ADD
4886: ST_TO_ADDR
4887: GO 4832
4889: POP
4890: POP
// result := pom ;
4891: LD_ADDR_VAR 0 4
4895: PUSH
4896: LD_VAR 0 6
4900: ST_TO_ADDR
// end ;
4901: LD_VAR 0 4
4905: RET
// function budovy_ok ( bud ) ; var a ; var i ; begin
4906: LD_INT 0
4908: PPUSH
4909: PPUSH
4910: PPUSH
// a = false ;
4911: LD_ADDR_VAR 0 3
4915: PUSH
4916: LD_INT 0
4918: ST_TO_ADDR
// for i in bud do
4919: LD_ADDR_VAR 0 4
4923: PUSH
4924: LD_VAR 0 1
4928: PUSH
4929: FOR_IN
4930: IFFALSE 4954
// if not BuildingsInProgress ( i ) then
4932: LD_VAR 0 4
4936: PPUSH
4937: CALL_OW 345
4941: NOT
4942: IFFALSE 4952
// a = true ;
4944: LD_ADDR_VAR 0 3
4948: PUSH
4949: LD_INT 1
4951: ST_TO_ADDR
4952: GO 4929
4954: POP
4955: POP
// result := a ;
4956: LD_ADDR_VAR 0 2
4960: PUSH
4961: LD_VAR 0 3
4965: ST_TO_ADDR
// end ; end_of_file
4966: LD_VAR 0 2
4970: RET
// var shipment , respawn , inqueue ; export function init_shipments_and_respawning ; begin
4971: LD_INT 0
4973: PPUSH
// shipment := Rand ( 0 , 3 ) ;
4974: LD_ADDR_LOC 3
4978: PUSH
4979: LD_INT 0
4981: PPUSH
4982: LD_INT 3
4984: PPUSH
4985: CALL_OW 12
4989: ST_TO_ADDR
// inqueue := [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ] ;
4990: LD_ADDR_LOC 5
4994: PUSH
4995: LD_INT 0
4997: PUSH
4998: LD_INT 0
5000: PUSH
5001: LD_INT 0
5003: PUSH
5004: LD_INT 0
5006: PUSH
5007: LD_INT 0
5009: PUSH
5010: LD_INT 0
5012: PUSH
5013: LD_INT 0
5015: PUSH
5016: LD_INT 0
5018: PUSH
5019: EMPTY
5020: LIST
5021: LIST
5022: LIST
5023: LIST
5024: LIST
5025: LIST
5026: LIST
5027: LIST
5028: ST_TO_ADDR
// end ;
5029: LD_VAR 0 1
5033: RET
// every 3 3$0 do
5034: GO 5036
5036: DISABLE
// begin if Prob ( time_new_people ) then
5037: LD_EXP 19
5041: PPUSH
5042: CALL_OW 13
5046: IFFALSE 5052
// vytvor_noveho_cloveka ;
5048: CALL 5054 0 0
// enable ;
5052: ENABLE
// end ;
5053: END
// function vytvor_noveho_cloveka ; var pom , pom1 ; var cla ; var i ; var sidy ; var poc ; begin
5054: LD_INT 0
5056: PPUSH
5057: PPUSH
5058: PPUSH
5059: PPUSH
5060: PPUSH
5061: PPUSH
5062: PPUSH
// pom = Rand ( 1 , 11 ) ;
5063: LD_ADDR_VAR 0 2
5067: PUSH
5068: LD_INT 1
5070: PPUSH
5071: LD_INT 11
5073: PPUSH
5074: CALL_OW 12
5078: ST_TO_ADDR
// case pom of 1 :
5079: LD_VAR 0 2
5083: PUSH
5084: LD_INT 1
5086: DOUBLE
5087: EQUAL
5088: IFTRUE 5092
5090: GO 5103
5092: POP
// cla = class_apeman ; 2 :
5093: LD_ADDR_VAR 0 4
5097: PUSH
5098: LD_INT 12
5100: ST_TO_ADDR
5101: GO 5294
5103: LD_INT 2
5105: DOUBLE
5106: EQUAL
5107: IFTRUE 5111
5109: GO 5122
5111: POP
// cla = class_apeman_engineer ; 3 :
5112: LD_ADDR_VAR 0 4
5116: PUSH
5117: LD_INT 16
5119: ST_TO_ADDR
5120: GO 5294
5122: LD_INT 3
5124: DOUBLE
5125: EQUAL
5126: IFTRUE 5130
5128: GO 5141
5130: POP
// cla = class_apeman_soldier ; 4 :
5131: LD_ADDR_VAR 0 4
5135: PUSH
5136: LD_INT 15
5138: ST_TO_ADDR
5139: GO 5294
5141: LD_INT 4
5143: DOUBLE
5144: EQUAL
5145: IFTRUE 5149
5147: GO 5160
5149: POP
// cla = class_apeman_kamikaze ; 5 :
5150: LD_ADDR_VAR 0 4
5154: PUSH
5155: LD_INT 17
5157: ST_TO_ADDR
5158: GO 5294
5160: LD_INT 5
5162: DOUBLE
5163: EQUAL
5164: IFTRUE 5168
5166: GO 5179
5168: POP
// cla = class_soldier ; 6 :
5169: LD_ADDR_VAR 0 4
5173: PUSH
5174: LD_INT 1
5176: ST_TO_ADDR
5177: GO 5294
5179: LD_INT 6
5181: DOUBLE
5182: EQUAL
5183: IFTRUE 5187
5185: GO 5198
5187: POP
// cla = class_mechanic ; 7 :
5188: LD_ADDR_VAR 0 4
5192: PUSH
5193: LD_INT 3
5195: ST_TO_ADDR
5196: GO 5294
5198: LD_INT 7
5200: DOUBLE
5201: EQUAL
5202: IFTRUE 5206
5204: GO 5217
5206: POP
// cla = class_engineer ; 8 :
5207: LD_ADDR_VAR 0 4
5211: PUSH
5212: LD_INT 2
5214: ST_TO_ADDR
5215: GO 5294
5217: LD_INT 8
5219: DOUBLE
5220: EQUAL
5221: IFTRUE 5225
5223: GO 5236
5225: POP
// cla = class_scientistic ; 9 :
5226: LD_ADDR_VAR 0 4
5230: PUSH
5231: LD_INT 4
5233: ST_TO_ADDR
5234: GO 5294
5236: LD_INT 9
5238: DOUBLE
5239: EQUAL
5240: IFTRUE 5244
5242: GO 5255
5244: POP
// cla = class_sniper ; 10 :
5245: LD_ADDR_VAR 0 4
5249: PUSH
5250: LD_INT 5
5252: ST_TO_ADDR
5253: GO 5294
5255: LD_INT 10
5257: DOUBLE
5258: EQUAL
5259: IFTRUE 5263
5261: GO 5274
5263: POP
// cla = class_mortar ; 11 :
5264: LD_ADDR_VAR 0 4
5268: PUSH
5269: LD_INT 8
5271: ST_TO_ADDR
5272: GO 5294
5274: LD_INT 11
5276: DOUBLE
5277: EQUAL
5278: IFTRUE 5282
5280: GO 5293
5282: POP
// cla = class_bazooker ; end ;
5283: LD_ADDR_VAR 0 4
5287: PUSH
5288: LD_INT 9
5290: ST_TO_ADDR
5291: GO 5294
5293: POP
// sidy = [ ] ;
5294: LD_ADDR_VAR 0 6
5298: PUSH
5299: EMPTY
5300: ST_TO_ADDR
// poc = 1 ;
5301: LD_ADDR_VAR 0 7
5305: PUSH
5306: LD_INT 1
5308: ST_TO_ADDR
// for i in Side_Nations do
5309: LD_ADDR_VAR 0 5
5313: PUSH
5314: LD_EXP 27
5318: PUSH
5319: FOR_IN
5320: IFFALSE 5364
// begin if i > 0 then
5322: LD_VAR 0 5
5326: PUSH
5327: LD_INT 0
5329: GREATER
5330: IFFALSE 5348
// sidy = sidy ^ poc ;
5332: LD_ADDR_VAR 0 6
5336: PUSH
5337: LD_VAR 0 6
5341: PUSH
5342: LD_VAR 0 7
5346: ADD
5347: ST_TO_ADDR
// poc = poc + 1 ;
5348: LD_ADDR_VAR 0 7
5352: PUSH
5353: LD_VAR 0 7
5357: PUSH
5358: LD_INT 1
5360: PLUS
5361: ST_TO_ADDR
// end ;
5362: GO 5319
5364: POP
5365: POP
// pom1 = sidy [ Rand ( 1 , sidy + 0 ) ] ;
5366: LD_ADDR_VAR 0 3
5370: PUSH
5371: LD_VAR 0 6
5375: PUSH
5376: LD_INT 1
5378: PPUSH
5379: LD_VAR 0 6
5383: PUSH
5384: LD_INT 0
5386: PLUS
5387: PPUSH
5388: CALL_OW 12
5392: ARRAY
5393: ST_TO_ADDR
// uc_side = pom1 ;
5394: LD_ADDR_OWVAR 20
5398: PUSH
5399: LD_VAR 0 3
5403: ST_TO_ADDR
// if pom <= 4 then
5404: LD_VAR 0 2
5408: PUSH
5409: LD_INT 4
5411: LESSEQUAL
5412: IFFALSE 5424
// uc_nation = nation_nature else
5414: LD_ADDR_OWVAR 21
5418: PUSH
5419: LD_INT 0
5421: ST_TO_ADDR
5422: GO 5440
// uc_nation = Side_Nations [ pom1 ] ;
5424: LD_ADDR_OWVAR 21
5428: PUSH
5429: LD_EXP 27
5433: PUSH
5434: LD_VAR 0 3
5438: ARRAY
5439: ST_TO_ADDR
// pom1 = get_human ( get_sex , cla , Rand ( 1 , 5 ) ,  ) ;
5440: LD_ADDR_VAR 0 3
5444: PUSH
5445: CALL 5558 0 0
5449: PPUSH
5450: LD_VAR 0 4
5454: PPUSH
5455: LD_INT 1
5457: PPUSH
5458: LD_INT 5
5460: PPUSH
5461: CALL_OW 12
5465: PPUSH
5466: LD_STRING 
5468: PPUSH
5469: CALL 5500 0 4
5473: ST_TO_ADDR
// PlaceUnitXYR ( pom1 , 81 , 97 , 4 , false ) ;
5474: LD_VAR 0 3
5478: PPUSH
5479: LD_INT 81
5481: PPUSH
5482: LD_INT 97
5484: PPUSH
5485: LD_INT 4
5487: PPUSH
5488: LD_INT 0
5490: PPUSH
5491: CALL_OW 50
// end ;
5495: LD_VAR 0 1
5499: RET
// function get_human ( sex , clas , level , name ) ; var pom ; begin
5500: LD_INT 0
5502: PPUSH
5503: PPUSH
// PrepareHuman ( sex , clas , level ) ;
5504: LD_VAR 0 1
5508: PPUSH
5509: LD_VAR 0 2
5513: PPUSH
5514: LD_VAR 0 3
5518: PPUSH
5519: CALL_OW 380
// hc_name := name ;
5523: LD_ADDR_OWVAR 26
5527: PUSH
5528: LD_VAR 0 4
5532: ST_TO_ADDR
// pom = CreateHuman ;
5533: LD_ADDR_VAR 0 6
5537: PUSH
5538: CALL_OW 44
5542: ST_TO_ADDR
// result := pom ;
5543: LD_ADDR_VAR 0 5
5547: PUSH
5548: LD_VAR 0 6
5552: ST_TO_ADDR
// end ;
5553: LD_VAR 0 5
5557: RET
// function get_sex ; begin
5558: LD_INT 0
5560: PPUSH
// if Prob ( 20 ) then
5561: LD_INT 20
5563: PPUSH
5564: CALL_OW 13
5568: IFFALSE 5580
// result = sex_female else
5570: LD_ADDR_VAR 0 1
5574: PUSH
5575: LD_INT 2
5577: ST_TO_ADDR
5578: GO 5588
// result = sex_male ;
5580: LD_ADDR_VAR 0 1
5584: PUSH
5585: LD_INT 1
5587: ST_TO_ADDR
// end ;
5588: LD_VAR 0 1
5592: RET
// every 0 0$5 + 0 0$1.1 do var d ;
5593: GO 5595
5595: DISABLE
5596: LD_INT 0
5598: PPUSH
// begin case tick of 1 .. 1 1$0 :
5599: LD_OWVAR 1
5603: PUSH
5604: LD_INT 1
5606: DOUBLE
5607: GREATEREQUAL
5608: IFFALSE 5616
5610: LD_INT 2100
5612: DOUBLE
5613: LESSEQUAL
5614: IFTRUE 5618
5616: GO 5629
5618: POP
// d := 150 ; 1 1$0 + 1 .. 5 5$0 :
5619: LD_ADDR_VAR 0 1
5623: PUSH
5624: LD_INT 150
5626: ST_TO_ADDR
5627: GO 5812
5629: LD_INT 2100
5631: PUSH
5632: LD_INT 1
5634: PLUS
5635: DOUBLE
5636: GREATEREQUAL
5637: IFFALSE 5645
5639: LD_INT 10500
5641: DOUBLE
5642: LESSEQUAL
5643: IFTRUE 5647
5645: GO 5658
5647: POP
// d := 100 ; 5 5$0 + 1 .. 10 10$0 :
5648: LD_ADDR_VAR 0 1
5652: PUSH
5653: LD_INT 100
5655: ST_TO_ADDR
5656: GO 5812
5658: LD_INT 10500
5660: PUSH
5661: LD_INT 1
5663: PLUS
5664: DOUBLE
5665: GREATEREQUAL
5666: IFFALSE 5674
5668: LD_INT 21000
5670: DOUBLE
5671: LESSEQUAL
5672: IFTRUE 5676
5674: GO 5687
5676: POP
// d := 90 ; 10 10$0 + 1 .. 20 20$0 :
5677: LD_ADDR_VAR 0 1
5681: PUSH
5682: LD_INT 90
5684: ST_TO_ADDR
5685: GO 5812
5687: LD_INT 21000
5689: PUSH
5690: LD_INT 1
5692: PLUS
5693: DOUBLE
5694: GREATEREQUAL
5695: IFFALSE 5703
5697: LD_INT 42000
5699: DOUBLE
5700: LESSEQUAL
5701: IFTRUE 5705
5703: GO 5716
5705: POP
// d := 70 ; 20 20$0 + 1 .. 30 30$0 :
5706: LD_ADDR_VAR 0 1
5710: PUSH
5711: LD_INT 70
5713: ST_TO_ADDR
5714: GO 5812
5716: LD_INT 42000
5718: PUSH
5719: LD_INT 1
5721: PLUS
5722: DOUBLE
5723: GREATEREQUAL
5724: IFFALSE 5732
5726: LD_INT 63000
5728: DOUBLE
5729: LESSEQUAL
5730: IFTRUE 5734
5732: GO 5745
5734: POP
// d := 60 ; 30 30$0 + 1 .. 50 50$0 :
5735: LD_ADDR_VAR 0 1
5739: PUSH
5740: LD_INT 60
5742: ST_TO_ADDR
5743: GO 5812
5745: LD_INT 63000
5747: PUSH
5748: LD_INT 1
5750: PLUS
5751: DOUBLE
5752: GREATEREQUAL
5753: IFFALSE 5761
5755: LD_INT 105000
5757: DOUBLE
5758: LESSEQUAL
5759: IFTRUE 5763
5761: GO 5774
5763: POP
// d := 35 ; 50 50$0 + 1 .. 300 300$0 :
5764: LD_ADDR_VAR 0 1
5768: PUSH
5769: LD_INT 35
5771: ST_TO_ADDR
5772: GO 5812
5774: LD_INT 105000
5776: PUSH
5777: LD_INT 1
5779: PLUS
5780: DOUBLE
5781: GREATEREQUAL
5782: IFFALSE 5790
5784: LD_INT 630000
5786: DOUBLE
5787: LESSEQUAL
5788: IFTRUE 5792
5790: GO 5803
5792: POP
// d := 20 ; else
5793: LD_ADDR_VAR 0 1
5797: PUSH
5798: LD_INT 20
5800: ST_TO_ADDR
5801: GO 5812
5803: POP
// d := 0 ; end ;
5804: LD_ADDR_VAR 0 1
5808: PUSH
5809: LD_INT 0
5811: ST_TO_ADDR
// if rand ( 1 , 10000 ) <= d * shipments_density then
5812: LD_INT 1
5814: PPUSH
5815: LD_INT 10000
5817: PPUSH
5818: CALL_OW 12
5822: PUSH
5823: LD_VAR 0 1
5827: PUSH
5828: LD_EXP 17
5832: MUL
5833: LESSEQUAL
5834: IFFALSE 5896
// begin wait ( Rand ( 1 , 0 0$4 ) ) ;
5836: LD_INT 1
5838: PPUSH
5839: LD_INT 140
5841: PPUSH
5842: CALL_OW 12
5846: PPUSH
5847: CALL_OW 67
// shipment := ( shipment + 1 ) mod 4 ;
5851: LD_ADDR_LOC 3
5855: PUSH
5856: LD_LOC 3
5860: PUSH
5861: LD_INT 1
5863: PLUS
5864: PUSH
5865: LD_INT 4
5867: MOD
5868: ST_TO_ADDR
// CreateCratesArea ( Rand ( 3 , 5 ) , q1 + shipment , true ) ;
5869: LD_INT 3
5871: PPUSH
5872: LD_INT 5
5874: PPUSH
5875: CALL_OW 12
5879: PPUSH
5880: LD_INT 6
5882: PUSH
5883: LD_LOC 3
5887: PLUS
5888: PPUSH
5889: LD_INT 1
5891: PPUSH
5892: CALL_OW 55
// end ; enable ;
5896: ENABLE
// end ;
5897: PPOPN 1
5899: END
// on UnitDestroyed ( j ) do begin if not ( getBType ( j ) in [ b_depot , b_warehouse ] ) then
5900: LD_VAR 0 1
5904: PPUSH
5905: CALL_OW 266
5909: PUSH
5910: LD_INT 0
5912: PUSH
5913: LD_INT 1
5915: PUSH
5916: EMPTY
5917: LIST
5918: LIST
5919: IN
5920: NOT
5921: IFFALSE 5925
// exit ;
5923: GO 5954
// KillBattleFlag ( FindBattleFlag ( GetX ( j ) , GetY ( j ) ) ) ;
5925: LD_VAR 0 1
5929: PPUSH
5930: CALL_OW 250
5934: PPUSH
5935: LD_VAR 0 1
5939: PPUSH
5940: CALL_OW 251
5944: PPUSH
5945: CALL_OW 420
5949: PPUSH
5950: CALL_OW 419
// end ; end_of_file
5954: PPOPN 1
5956: END
// every 0 0$2 do var win , i ;
5957: GO 5959
5959: DISABLE
5960: LD_INT 0
5962: PPUSH
5963: PPUSH
// begin if your_side then
5964: LD_OWVAR 2
5968: IFFALSE 6176
// if not filterAllUnits ( [ [ f_side , your_side ] , [ f_or , [ f_type , unit_human ] , [ f_btype , b_depot ] , [ f_btype , b_warehouse ] ] ] ) then
5970: LD_INT 22
5972: PUSH
5973: LD_OWVAR 2
5977: PUSH
5978: EMPTY
5979: LIST
5980: LIST
5981: PUSH
5982: LD_INT 2
5984: PUSH
5985: LD_INT 21
5987: PUSH
5988: LD_INT 1
5990: PUSH
5991: EMPTY
5992: LIST
5993: LIST
5994: PUSH
5995: LD_INT 30
5997: PUSH
5998: LD_INT 0
6000: PUSH
6001: EMPTY
6002: LIST
6003: LIST
6004: PUSH
6005: LD_INT 30
6007: PUSH
6008: LD_INT 1
6010: PUSH
6011: EMPTY
6012: LIST
6013: LIST
6014: PUSH
6015: EMPTY
6016: LIST
6017: LIST
6018: LIST
6019: LIST
6020: PUSH
6021: EMPTY
6022: LIST
6023: LIST
6024: PPUSH
6025: CALL_OW 69
6029: NOT
6030: IFFALSE 6047
// begin wait ( 0 0$3 ) ;
6032: LD_INT 105
6034: PPUSH
6035: CALL_OW 67
// YouLostInMultiplayer ;
6039: CALL_OW 107
// exit ;
6043: GO 6177
// end else
6045: GO 6176
// begin win := true ;
6047: LD_ADDR_VAR 0 1
6051: PUSH
6052: LD_INT 1
6054: ST_TO_ADDR
// for i := 1 to Side_positions do
6055: LD_ADDR_VAR 0 2
6059: PUSH
6060: DOUBLE
6061: LD_INT 1
6063: DEC
6064: ST_TO_ADDR
6065: LD_EXP 26
6069: PUSH
6070: FOR_TO
6071: IFFALSE 6155
// if Side_positions [ i ] and ( i <> your_side ) then
6073: LD_EXP 26
6077: PUSH
6078: LD_VAR 0 2
6082: ARRAY
6083: PUSH
6084: LD_VAR 0 2
6088: PUSH
6089: LD_OWVAR 2
6093: NONEQUAL
6094: AND
6095: IFFALSE 6153
// begin if MultiplayerSideAlive ( i ) then
6097: LD_VAR 0 2
6101: PPUSH
6102: CALL_OW 108
6106: IFFALSE 6153
// if not Side_Teams [ i ] or ( Side_Teams [ i ] <> Side_Teams [ your_side ] ) then
6108: LD_EXP 24
6112: PUSH
6113: LD_VAR 0 2
6117: ARRAY
6118: NOT
6119: PUSH
6120: LD_EXP 24
6124: PUSH
6125: LD_VAR 0 2
6129: ARRAY
6130: PUSH
6131: LD_EXP 24
6135: PUSH
6136: LD_OWVAR 2
6140: ARRAY
6141: NONEQUAL
6142: OR
6143: IFFALSE 6153
// win := false ;
6145: LD_ADDR_VAR 0 1
6149: PUSH
6150: LD_INT 0
6152: ST_TO_ADDR
// end ;
6153: GO 6070
6155: POP
6156: POP
// if win then
6157: LD_VAR 0 1
6161: IFFALSE 6176
// begin wait ( 0 0$3 ) ;
6163: LD_INT 105
6165: PPUSH
6166: CALL_OW 67
// YouWinInMultiplayer ;
6170: CALL_OW 106
// exit ;
6174: GO 6177
// end ; end ; enable ;
6176: ENABLE
// end ;
6177: PPOPN 2
6179: END
// every 0 0$3 do var teams_f ; var i , j ; var pom ;
6180: GO 6182
6182: DISABLE
6183: LD_INT 0
6185: PPUSH
6186: PPUSH
6187: PPUSH
6188: PPUSH
// begin teams_f = [ 0 , 0 , 0 , 0 ] ;
6189: LD_ADDR_VAR 0 1
6193: PUSH
6194: LD_INT 0
6196: PUSH
6197: LD_INT 0
6199: PUSH
6200: LD_INT 0
6202: PUSH
6203: LD_INT 0
6205: PUSH
6206: EMPTY
6207: LIST
6208: LIST
6209: LIST
6210: LIST
6211: ST_TO_ADDR
// for i in FLAGY do
6212: LD_ADDR_VAR 0 2
6216: PUSH
6217: LD_EXP 33
6221: PUSH
6222: FOR_IN
6223: IFFALSE 6288
// if i <> 0 then
6225: LD_VAR 0 2
6229: PUSH
6230: LD_INT 0
6232: NONEQUAL
6233: IFFALSE 6286
// begin pom = Side_Teams [ i ] ;
6235: LD_ADDR_VAR 0 4
6239: PUSH
6240: LD_EXP 24
6244: PUSH
6245: LD_VAR 0 2
6249: ARRAY
6250: ST_TO_ADDR
// teams_f = vloz_na_pozici ( teams_f [ pom ] + 1 , pom , teams_f ) ;
6251: LD_ADDR_VAR 0 1
6255: PUSH
6256: LD_VAR 0 1
6260: PUSH
6261: LD_VAR 0 4
6265: ARRAY
6266: PUSH
6267: LD_INT 1
6269: PLUS
6270: PPUSH
6271: LD_VAR 0 4
6275: PPUSH
6276: LD_VAR 0 1
6280: PPUSH
6281: CALL 4805 0 3
6285: ST_TO_ADDR
// end ;
6286: GO 6222
6288: POP
6289: POP
// for i := 1 to 4 do
6290: LD_ADDR_VAR 0 2
6294: PUSH
6295: DOUBLE
6296: LD_INT 1
6298: DEC
6299: ST_TO_ADDR
6300: LD_INT 4
6302: PUSH
6303: FOR_TO
6304: IFFALSE 6412
// if teams_f [ i ] >= 4 then
6306: LD_VAR 0 1
6310: PUSH
6311: LD_VAR 0 2
6315: ARRAY
6316: PUSH
6317: LD_INT 4
6319: GREATEREQUAL
6320: IFFALSE 6410
// for j := 1 to 8 do
6322: LD_ADDR_VAR 0 3
6326: PUSH
6327: DOUBLE
6328: LD_INT 1
6330: DEC
6331: ST_TO_ADDR
6332: LD_INT 8
6334: PUSH
6335: FOR_TO
6336: IFFALSE 6408
// begin if Side_Teams [ j ] = i and j = your_side then
6338: LD_EXP 24
6342: PUSH
6343: LD_VAR 0 3
6347: ARRAY
6348: PUSH
6349: LD_VAR 0 2
6353: EQUAL
6354: PUSH
6355: LD_VAR 0 3
6359: PUSH
6360: LD_OWVAR 2
6364: EQUAL
6365: AND
6366: IFFALSE 6372
// YouWinInMultiplayer ;
6368: CALL_OW 106
// if Side_Teams [ j ] <> i and j = your_side then
6372: LD_EXP 24
6376: PUSH
6377: LD_VAR 0 3
6381: ARRAY
6382: PUSH
6383: LD_VAR 0 2
6387: NONEQUAL
6388: PUSH
6389: LD_VAR 0 3
6393: PUSH
6394: LD_OWVAR 2
6398: EQUAL
6399: AND
6400: IFFALSE 6406
// YouLostInMultiplayer ;
6402: CALL_OW 107
// end ;
6406: GO 6335
6408: POP
6409: POP
6410: GO 6303
6412: POP
6413: POP
// enable ;
6414: ENABLE
// end ;
6415: PPOPN 4
6417: END
